2011-08-10 27 views
4

是否有可能用php直接調用存儲在類的成員變量中的回調?目前我正在使用一種解決方法,我暫時將我的回調存儲在本地變量中。調用回調存儲爲成員變量

class CB { 
    private $cb; 
    public function __construct($cb) { 
    $this->cb = $cb; 
    } 
    public function call() { 
    $this->cb(); // does not work 
    $cb = $this->cb; 
    $cb(); // does work 
    } 
} 

PHP抱怨$this->cb()不是有效的方法,即不存在。

+0

類似的問題,提出和回答[這裏](http://stackoverflow.com/questions/1656151/PHP的可調用的對象-AS-對象構件)。懸崖筆記版本:「主要是因爲寬鬆的打字,沒有辦法實際推斷你可能會做什麼,所以它默認錯誤早。」 – Problematic

+0

也許'{$ this-> cb}()'? '{}'應該強制PHP將cb引用看作'$ cb'成員var,而不是作爲對象中的cb方法。 –

+0

marc,no,»意外{,期待_something else_ ...« – knittl

回答

3

您需要使用call_user_func

class CB { 
    private $cb; 
    public function __construct($cb) { 
     $this->cb = $cb; 
    } 
    public function call() { 
     call_user_func($this->cb, 'hi'); 
    } 
} 

$cb = new CB(function($param) { echo $param; }); 
$cb->call(); // echoes 'hi' 
+0

可惜我不能直接調用它,但我想沒有辦法使用'call_user_func'或將回調存儲在本地var中。似乎PHP解析器在某些方面相當有限。 'call_user_func'已經很好了,謝謝! – knittl

1

在PHP7你可以這樣調用:

class CB { 
    /** @var callable */ 
    private $cb; 
    public function __construct(callable $cb) { 
    $this->cb = $cb; 
    } 
    public function call() { 
    ($this->cb)(); 
    } 
}