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


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

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

我有:

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

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

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

如果不是,你们会怎么建议?

谢谢!

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

$var = Class::someFunction();

没有本地方法

但是

你可以用工厂的方法来实现你想要做的事情。

class a {
    public static create() {
        return new self();
    }
    //....
}
$something = a::create()->foo();
$var = (new Class())->someFunction();

我相信这是php5.4中非常有效的语法。

如图所示:http://www.php.net/manual/en/migration54.new-features.php

是的,您可以在新对象上调用方法,但它仅在PHP>=5.4 中受支持

class Test {
   public function hello() {
    return "hello";
   }
} 
$var = (new Test())->hello();
echo $var; // prints hello

不,这在<PHP 5.4.0

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

也就是说,根据您的描述,听起来您想要一个static函数。

这是一个无效的语法。但是,为什么不重用为对象分配的变量呢?

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

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

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

没有比做更漂亮的了

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