2010-08-11 48 views
15

如果我在PHP類中重載__call方法,如果我的代碼沒有執行其他操作,該如何調用實際方法?例如:PHP如何調用parent :: __ call()並傳入參數

public function __call($name, $arguments) 
{ 
    if($name == 'tom') 
    { 
     $this->doName($name); 
    } 
    else 
    { 
     // Something here to carry on the __call maybe: 
     // $this->$name($arguments); 
    } 
} 

的問題是,$arguments通過作爲數組過去了,我怎麼可能繼續通過信息$this->$name($arg, $arg, $arg ...)通過他們是否有這樣做的權利呢?

回答

18

您可以撥打:

return parent::__call($name, $arguments); 

還是我誤解你問什麼?

編輯:

如果你的意思是你要調用$this->$name()嘗試觸發parent::__call(),它不會工作。你會在一個無限循環中結束,直到堆棧溢出和PHP崩潰(換句話說,它是壞的)...

+0

嘿!完全沒有想到這一點! :D – tarnfeld 2010-08-11 20:27:52

6

您可以使用此:

call_user_func_array("self::method", $parameters) 
+0

謝謝你的例子,我沒有訪問php.net :) – Marecky 2013-01-27 23:07:06

+0

謝謝soooooo多 – 2013-10-18 16:48:19

+0

這將工作ONY靜態方法.... – igaster 2016-01-08 11:37:06