我想知道为什么这不起作用:(PHP Fatal error: Call to undefined method 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 error: syntax error, unexpected '(', expecting ',' or ';'
无效。那么,在没有中间变量的情况下调用y
闭包属性的正确方法是什么。
答案 0 :(得分:4)
因为在PHP中,类可以具有函数和属性,而函数和属性可以具有相同的名称。
所以当你打电话时:
$x->y();
PHP将在$x
上查找名为y
的函数,然后调用它。你所拥有的是一个属性(持有一个函数/闭包)。
这与javascript不同,其中函数和属性都在同一个命名空间中。