PHP语法:$ var =(new Class()) - > someFunction();

时间:2012-07-31 13:44:09

标签: php syntax

基本上我在标题中提到的是我想要做的事情,我不确定它是否可以做。

我有:

$myClass = new Class();
$var = $myClass->someFunction();

但是我再也不会使用$ myClass了,我可以取消它以释放内存。但我试图同时清理我的代码,并想知道以下是否有效

$var = (new Class())->someFunction();

如果它不是你们建议的那个?

谢谢!

7 个答案:

答案 0 :(得分:8)

您始终可以将someFunction()声明为static方法。

$var = Class::someFunction();

答案 1 :(得分:2)

没有本地方法可以做到这一点

<强>但是

您可以使用工厂方法实现您想要的目标。

class a {
    public static create() {
        return new self();
    }
    //....
}

$something = a::create()->foo();

答案 2 :(得分:2)

$var = (new Class())->someFunction();

我相信这是完全有效的语法,如php 5.4。

从这里可以看出:http://www.php.net/manual/en/migration54.new-features.php

答案 3 :(得分:1)

不,它在版本&lt;中是不可能的。 PHP 5.4.0

在PHP&gt; = 5.4.0中,您可以取消引用数组并使用上面列出的语法。

那就是说,根据你的描述,你觉得你需要一个static功能。

答案 4 :(得分:1)

是的,您可以在新对象上调用方法,但仅在PHP中支持&gt; = 5.4

class Test {
   public function hello() {
    return "hello";
   }
} 

$var = (new Test())->hello();

echo $var; // prints hello

答案 5 :(得分:0)

这是一种无效的语法。但是,为什么不重用你赋予对象的变量呢?

$var = new Class();
$var = $var->someFunction();

答案 6 :(得分:0)

请记住,您几乎可以在需要返回值或迭代的每个实例中使用$ myClass。例如:

foreach($myClass->fetchUsers() as $user){
}

if($myClass->userLoggedIn()){
}

比做

更有趣
$var = $myClass->fetchUsers();
foreach($var as $user){}