以下PHP代码有效:
$a = new MyClass();
$a->myFunction();
是否有合并这两种陈述的有效方法?我的第一次尝试可以理解导致语法错误:
new MyClass()->myFunction();
然后我在创建的对象周围添加了括号,这在PHP 5.4.17上运行正常,但在PHP 5.3.26上没有:
(new MyClass())->myFunction();
这个语法在什么时候被接受,或者我应该放弃这个想法并且只使用两行。我的实际用例更复杂,如果我不必一直不断创建单用变量,它会使代码更整洁。
我无法在文档中找到任何相关内容。
答案 0 :(得分:1)
(new MyClass())->myFunction();
自PHP 5.4起,就是一个很好的例子。你可以使用它,但我认为两行方法更简洁,向后兼容旧的PHP版本,不会混淆读取代码的新手程序员:)
答案 1 :(得分:1)
在PHP 5.4.0中添加。已添加实例化的类成员访问权限,例如(new Foo)->bar()
。
答案 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();