直接调用分配给对象属性的闭包

121

我想直接调用分配给对象属性的闭包函数,而不必重新分配到变量再调用。这可能吗?

下面的代码无法工作,并导致“Fatal error: Call to undefined method stdClass::callback()”。

$obj = new stdClass();
$obj->callback = function() {
    print "HelloWorld!";
};
$obj->callback();

1
这正是你所需要的:https://github.com/ptrofimov/jslikeobject 更棒的是:你可以在闭包内使用$this并且使用继承。仅支持PHP>=5.4! - Renato Cuccinotto
12个回答

0
如果您使用的是 PHP 5.4 或更高版本,您可以将可调用对象绑定到对象的作用域以调用自定义行为。例如,如果您设置了以下内容...
function run_method($object, Closure $method)
{
    $prop = uniqid();
    $object->$prop = \Closure::bind($method, $object, $object);
    $object->$prop->__invoke();
    unset($object->$prop);
}

而且你正在操作一个类,就像这样...

class Foo
{
    private $value;
    public function getValue()
    {
        return $this->value;
    }
}

你可以像在对象范围内操作一样运行自己的逻辑。

$foo = new Foo();
run_method($foo, function(){
    $this->value = 'something else';
});

echo $foo->getValue(); // prints "something else"

0

我注意到这在PHP5.5中可以运行。

$a = array();
$a['callback'] = function() {
    print "HelloWorld!";
};
$a['callback']();

允许创建一个闭包的伪对象集合。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接