【发布时间】:2012-12-14 04:45:11
【问题描述】:
为什么使用 new 关键字的表达式需要括号才能在链式执行中使用? 例如,在 AS3 中,您不需要括号。在 PHP 中,这是对解释器的一种风格帮助,还是有一个我不知道的更大原因?是执行顺序问题吗?
PHP 中的构造函数链接
感谢这个问题Chaining a constructor with an object function call in PHP我想出了如何......
对象定义
除此之外:显然,魔术方法 __construct 总是隐式返回 $this,如果您明确返回 $this(或任何与此相关的),则不会发生错误/警告/异常。
class Chihuahua
{
private $food;
function __construct( $food )
{
$this->food = $food;
}
function burp()
{
echo "$this->food burp!";
}
}
作品
(new Chihuahua('cake'))->burp();
不起作用(但我希望它起作用)
new Chihuahua('cake')->burp();
【问题讨论】:
-
因为 PHP 语法一团糟。有些事情会随机发挥作用,有些则不会。
-
@melpomene:我不会把它归类为一团糟,只是挑剔。
-
它看起来像是一种从新实例添加方法链接的快速方法,依赖于运算符优先级
-
@melpomene,PHP 是一团糟,但在这种情况下并非如此。感谢上帝,有一种叫做“运算符优先级”的东西。而且我敢肯定,为了正确起见,OP 会解决增加 2 个括号的大问题。
-
@Jeffrey JavaScript 也有一个叫做“运算符优先级”的东西,你不需要 JS 中的括号(因为
new的优先级高于方法调用(为什么不呢?)) .你的论点无效。