8

正如您可能在标题中看到的那样,我的编程背景是 Java。在Java中你可以做这样的事情

new Object().callSomeMethod();

无需将创建的对象分配给变量,如果您只需要此对象一次,则编码非常有用且清晰。

现在在 PHP 我尝试做同样的事情

new Object()->callSomeMethod();

但在这里我得到一个'解析错误:语法错误,意外'->'(T_OBJECT_OPERATOR)'。

有没有办法在 PHP 中做到这一点?

4

1 回答 1

17
(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

我认为没有提供无括号语法是因为它建议的解析优先级不是很直观(肉眼难以理解),如第三个示例所示。

于 2013-09-18T13:21:38.370 回答