2009-06-11 73 views
22

考慮這個簡單的場景:調用與call_user_func對象的對象的方法

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

解決方案:

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

考慮這樣的場景:

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

若本解決方案的工作?

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

還是應該這樣工作?

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

編輯: 將try/catch語句適用於SOAP異常,TRIGER同時使用call_user_func?

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

我認爲這是一個問題/答案網站...但運行這兩個解決方案的概念,看看哪一個工作從來沒有發生在你身上? – Mario 2009-06-11 13:24:19

+0

這是一個由SO贊助的測試問題,您有多種選擇。答案應該是字母A,B或C的形式。 – 2013-09-02 05:19:16

回答

54

這應該工作:

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

第一個參數是一個callback type,包含一個對象的引用和方法名。

5

這裏有一個hackish的變種,可能是有用的人:

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

這裏使用了PHP變量,變量。醜陋地獄,但不是比其他人更醜陋...