正如您可能在标题中看到的那样,我的编程背景是 Java。在Java中你可以做这样的事情
new Object().callSomeMethod();
无需将创建的对象分配给变量,如果您只需要此对象一次,则编码非常有用且清晰。
现在在 PHP 我尝试做同样的事情
new Object()->callSomeMethod();
但在这里我得到一个'解析错误:语法错误,意外'->'(T_OBJECT_OPERATOR)'。
有没有办法在 PHP 中做到这一点?
正如您可能在标题中看到的那样,我的编程背景是 Java。在Java中你可以做这样的事情
new Object().callSomeMethod();
无需将创建的对象分配给变量,如果您只需要此对象一次,则编码非常有用且清晰。
现在在 PHP 我尝试做同样的事情
new Object()->callSomeMethod();
但在这里我得到一个'解析错误:语法错误,意外'->'(T_OBJECT_OPERATOR)'。
有没有办法在 PHP 中做到这一点?
(new Object())->callSomeMethod();
将在 PHP 5.4+ 中工作
编辑
这是PHP 5.4 中添加的一个新特性:
添加了对实例化的类成员访问,例如
(new Foo)->bar()
.
编辑2
PHP 特性 RFC提出了两组语法(带 & 不带括号),它们都在 RFC 中实现,但只发布了一组。我找不到解释该决定的链接。
让我们看一下 RFC 中的无括号语法示例:
new foo->bar()
应该读作(new foo)->bar()
new $foo()->bar
应该读作(new $foo())->bar
new $bar->y()->x
应该读作(new ($bar->y)())->x
我认为没有提供无括号语法是因为它建议的解析优先级不是很直观(肉眼难以理解),如第三个示例所示。