我想直接调用分配给对象属性的闭包函数,而不必重新分配到变量再调用。这可能吗?
下面的代码无法工作,并导致“Fatal error: Call to undefined method stdClass::callback()”。
$obj = new stdClass();
$obj->callback = function() {
print "HelloWorld!";
};
$obj->callback();
我想直接调用分配给对象属性的闭包函数,而不必重新分配到变量再调用。这可能吗?
下面的代码无法工作,并导致“Fatal error: Call to undefined method stdClass::callback()”。
$obj = new stdClass();
$obj->callback = function() {
print "HelloWorld!";
};
$obj->callback();
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"
我注意到这在PHP5.5中可以运行。
$a = array();
$a['callback'] = function() {
print "HelloWorld!";
};
$a['callback']();
允许创建一个闭包的伪对象集合。