构造函数后直接调用函数:new Object() - > callFunction()

Bas*_*nck 8 php constructor class function call

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

new Object().callSomeMethod();
Run Code Online (Sandbox Code Playgroud)

如果您只需要一次这个对象,则不将创建的Object分配给变量,非常有用且清晰的编码.

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

new Object()->callSomeMethod();
Run Code Online (Sandbox Code Playgroud)

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

有没有办法在PHP中执行此操作?

Kit*_*ita 16

(new Object())->callSomeMethod();
Run Code Online (Sandbox Code Playgroud)

将在PHP 5.4+中运行

编辑

这是PHP 5.4上添加的新功能:

已添加实例化的类成员访问权限,例如(new Foo)->bar().

EDIT2

PHP功能RFC提出了两套语法(以&不带括号)的,两者都在RFC实现的,但只有一个已经发货.我找不到解释决定的链接.

我们来看看RFC中的无括号语法示例:

  • new foo->bar() 应该读作 (new foo)->bar()
  • new $foo()->bar 应该读作 (new $foo())->bar
  • new $bar->y()->x 应该读作 (new ($bar->y)())->x

我认为无法发布无括号语法,因为它提出的解析优先级不是很直观(很难用眼睛看),如第3个例子所示.

  • 为什么PHP不允许OP提到的语法? (2认同)