【问题标题】:Strange behaviour in invoking closures调用闭包时的奇怪行为
【发布时间】:2023-03-25 13:16:02
【问题描述】:

我想知道为什么这不起作用:(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 闭包属性的正确方法是什么。

【问题讨论】:

  • o.O 这是下一级的扭曲用法
  • 替代:call_user_func($x->y).

标签: php closures


【解决方案1】:

因为在 PHP 中一个类可以有函数和属性,而函数和属性可能有相同的名称。

所以当你打电话时:

$x->y();

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多