我试图了解如何使用OOP回调方法使用匿名函数。我的班级看起来像这样:
class Example
{
protected $Callbacks = array();
public function set(
$foo,$bar
) {
$this->Callbacks[$foo] = $bar;
}
public function get(
$foo
) {
return $this->Callbacks[$foo];
}
}
要添加新的回调,我只需执行以下操作:
$example = new Example;
$example->set(
'example', function() {
return 'hello';
});
但是,当我想要使用该功能时,运行时没有任何反应:
echo $example->get('example');
任何人都可以帮助并可能解释如何在OOP操作中创建回调吗?
答案 0 :(得分:2)
你可以这样调用你的函数:
echo $example->get('example')();
但我认为这很难看。您也可以使用魔法来实现此目的。但这也不是最好的做法。
class Example
{
protected $Callbacks = array();
public function __set($name, $value)
{
$this->Callbacks[$name] = $value;
}
public function __call($name, array $arguments)
{
if (!isset($this->Callbacks[$name])) {
trigger_error('Call to undefined method ' . get_class($this) . "::$name()", E_USER_ERROR);
}
return $this->Callbacks[$name]($arguments);
}
}
$example = new Example();
$example->example = function() {
return 'hello';
};
echo $example->example();
答案 1 :(得分:0)
非常感谢@PeeHaa,我终于解决了这个问题。
当我检索该函数时,它仍处于关闭状态并且尚未执行。根据您的PHP版本,您可以执行以下任一操作:
$execute = $example->get('example')();
echo $execute;
echo $example->get('example')();