2009-06-11 16 views
22

इस सरल परिदृश्य पर विचार करें:call_user_func के साथ वस्तु की वस्तु की विधि बुला

$this->method($arg1, $arg2); 

समाधान:

$this->object->method($arg1, $arg2); 

चाहिए इस समाधान काम:

call_user_func_array(array($this,'method'), array($arg1, $arg2)); 

इस परिदृश्य पर विचार करें?

call_user_func_array(array($this->object,'method'), array($arg1, $arg2)); 

या यह काम करना चाहिए?

call_user_func_array(array($this, 'object','method'), array($arg1, $arg2)); 

संपादित करें: call_user_func का उपयोग करते समय कोशिश करेंगे/कैच सोप अपवाद, triger के लिए काम करता है?

try { 
    $soap_res = call_user_func_array(array($this->service,'getBanana'), array(0, 10)); 
} catch (SoapFault $fault) { 
    die($fault->faultstring) 
} 
+2

मुझे लगता है कि यह एक प्रश्न/उत्तर साइट ... लेकिन देखने के लिए जो एक कभी नहीं आप के लिए काम करता है हुई दोनों समाधान चल की धारणा है? – Mario

+0

यह एसओ द्वारा प्रायोजित एक परीक्षण प्रश्न है, और आपके पास कई विकल्प हैं। जवाब) पत्र के रूप में होना चाहिए ए, बी या सी –

उत्तर

54

यह काम करना चाहिए:

call_user_func_array(array($this->object,'method'), array($arg1, $arg2)); 

पहला तर्क एक callback type है, एक वस्तु संदर्भ और एक विधि नाम हैं।

+1

तर्क स्वचालित रूप से पारित आप 'func_get_args उपयोग कर सकते हैं करने के लिए ('। उदाहरण के लिए: 'call_user_func_array (सरणी ($ यह,' विधि '), func_get_args()) ' – DesignerGuy

5

यहाँ एक hackish संस्करण है, किसी के लिए उपयोगी हो सकता है:

$method_name_as_string = 'method_name'; 
$this->$method_name_as_string($arg1, $arg2); 

यह पीएचपी चर-चर का उपयोग करता है। नरक के रूप में बदसूरत, लेकिन दूसरों की तुलना में विशेष रूप से भद्दा नहीं ...

संबंधित मुद्दे