2012-10-14 46 views
9

我有一個方法,簡化看起來是這樣的:

class Foo { 

    public function bar($id) { 
     // do stuff using $this, error occurs here 
    } 

} 

調用它像這樣的偉大工程:

$foo = new Foo(); 
$foo->bar(1); 

但是,如果我把它用call_user_func_array(),像這樣:

call_user_func_array(array("Foo", "bar"), array('id' => 1)); 

哪個應該是平等的,我得到以下錯誤:

Fatal error: Using $this when not in object context in

$this是不確定的)

這是爲什麼?有什麼我失蹤?我應該怎麼做,所以我仍然可以在被調用的方法中使用$this

回答

14

array("Foo", "bar")等於Foo::bar(),即一個靜態方法 - 這是有意義的,因爲$foo是行不通使用,因此PHP 不能知道使用哪個實例。

你想要的是array($foo, "bar")來調用實例的方法。

請參閱http://php.net/manual/en/language.types.callable.php瞭解各種可調用的列表。


您還需要傳遞參數作爲索引數組而非關聯數組,即array(1)代替array('id' => 1)

+0

只是爲了記錄有在他的第二碼錯誤,'陣列('身份證'=> 1)'應該是'array(1)',根據他的'bar'定義來判斷' – Mahn

+0

哈!應該看到即將到來的,並不認爲這很簡單。萬分感謝!關於你的編輯:這是一個錯字,把它寫在SO-ask窗口中:-)。再次感謝! – Zar