我可以在对象的新实例上使用箭头运算符吗?

时间:2013-12-09 21:20:22

标签: php

以下PHP代码有效:

$a = new MyClass();
$a->myFunction();

是否有合并这两种陈述的有效方法?我的第一次尝试可以理解导致语法错误:

new MyClass()->myFunction();

然后我在创建的对象周围添加了括号,这在PHP 5.4.17上运行正常,但在PHP 5.3.26上没有:

(new MyClass())->myFunction();

这个语法在什么时候被接受,或者我应该放弃这个想法并且只使用两行。我的实际用例更复杂,如果我不必一直不断创建单用变量,它会使代码更整洁。

我无法在文档中找到任何相关内容。

4 个答案:

答案 0 :(得分:1)

(new MyClass())->myFunction();
自PHP 5.4起,

就是一个很好的例子。你可以使用它,但我认为两行方法更简洁,向后兼容旧的PHP版本,不会混淆读取代码的新手程序员:)

答案 1 :(得分:1)

在PHP 5.4.0中添加。已添加实例化的类成员访问权限,例如(new Foo)->bar()

http://docs.php.net/manual/en/migration54.new-features.php

答案 2 :(得分:1)

这个答案直接来自this question,也在这里问过SO。

您要求的功能可从PHP 5.4获得。以下是PHP 5.4中的新功能列表:

http://docs.php.net/manual/en/migration54.new-features.php

新功能列表中的相关部分:

  

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

答案 3 :(得分:1)

PHP 5.4中引入了(new MyClass())->myFunction()表示法(包括其他一些简写符号,请参阅new features-page)。

一种解决方法(我建议不要在所有情况下滥用它)是在MyClass中使用静态方法:

class MyClass {
    public static newInstance() {
        return new self();
    }
    public function myFunction() {}
}

MyClass::newInstance()->myFunction();