创建OOP回调

时间:2016-06-24 11:50:00

标签: php oop callback anonymous-function

我试图了解如何使用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操作中创建回调吗?

2 个答案:

答案 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')();