为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2019-07-13 14:48:28
直接调用分配给对象属性的闭包我希望能够调用直接分配给对象属性的闭包,而不必将闭包重新分配给变量,然后调用它。这个是可能的吗?下面的代码不起作用,并导致Fatal error: Call to undefined method stdClass::callback().$obj = new stdClass();$obj->callback = function() {     print "HelloWorld!";};$obj->callback();
查看完整描述

3 回答

?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您可以通过在闭包上调用_Invoke来实现这一点,因为这是对象用于像函数一样行为的神奇方法:

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

当然,如果回调是一个数组或一个字符串(在PHP中也可以是有效的回调)-只是用于闭包和其他具有_Invoke行为的对象,那么这是行不通的。


查看完整回答
反对 回复 2019-07-13
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果你真的坚持。另一个解决办法是:

$obj = new ArrayObject(array(),2);$obj->callback = function() {
    print "HelloWorld!";};$obj['callback']();

但这不是最好的语法。

但是,PHP解析器总是将T_OBJECT_OPERATORIDENTIFIER(作为方法调用。似乎没有办法->绕过方法表,转而访问属性。


查看完整回答
反对 回复 2019-07-13
  • 3 回答
  • 0 关注
  • 349 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信