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

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

我希望能够调用直接分配给对象属性的闭包,而不必将闭包重新分配给变量,然后调用它。这个是可能的吗?

下面的代码不起作用,并导致Fatal error: Call to undefined method stdClass::callback().

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


慕森王
浏览 350回答 3
3回答

一只名叫tom的猫

您可以通过在闭包上调用_Invoke来实现这一点,因为这是对象用于像函数一样行为的神奇方法:$obj = new stdClass();$obj->callback = function() {     print "HelloWorld!";};$obj->callback->__invoke();当然,如果回调是一个数组或一个字符串(在PHP中也可以是有效的回调)-只是用于闭包和其他具有_Invoke行为的对象,那么这是行不通的。

慕尼黑的夜晚无繁华

如果你真的坚持。另一个解决办法是:$obj = new ArrayObject(array(),2);$obj->callback = function() {     print "HelloWorld!";};$obj['callback']();但这不是最好的语法。但是,PHP解析器总是将T_OBJECT_OPERATOR, IDENTIFIER, (作为方法调用。似乎没有办法->绕过方法表,转而访问属性。
打开App,查看更多内容
随时随地看视频慕课网APP