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不同,其中函数属性都在同一个“命名空间”中.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...