微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 调用闭包时的奇怪行为

我想知道为什么这不起作用:(PHP致命错误调用未定义的方法stdClass :: y())

$x=new stdClass;
$x->y=function(){return 'hi';};
echo $x->y();

但这有效:

$x=new stdClass;
$x->y=function(){return 'hi';};
$y=$x->y;
echo $y();

echo($x-> y)();还返回Parse错误:语法错误,意外'(‘,期待’,’或’;’无效.那么,在没有中间变量的情况下调用y闭包属性的正确方法是什么.

解决方法:

因为在PHP中,类可以具有函数属性,并且函数属性可以具有相同的名称.

所以当你打电话时:

$x->y();

PHP将在$x上查找名为y的函数,然后调用它.你拥有的是一个属性(它包含一个函数/闭包).

这与javascript不同,其中函数属性都在同一个“命名空间”中.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐