2

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

我有:

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

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

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

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

谢谢!

4

7 回答 7

8

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

$var = Class::someFunction();
于 2012-07-31T13:47:13.453 回答
2

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

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

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

$something = a::create()->foo();
于 2012-07-31T13:48:22.890 回答
2
$var = (new Class())->someFunction();

我相信这是从 php 5.4 开始的完全有效的语法。

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

于 2012-07-31T13:50:25.553 回答
1

不,在 < PHP 5.4.0 的版本中是不可能的

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

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

于 2012-07-31T13:47:49.703 回答
1

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

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

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

echo $var; // prints hello
于 2012-07-31T13:51:57.693 回答
0

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

$var = new Class();
$var = $var->someFunction();
于 2012-07-31T13:47:06.880 回答
0

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

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

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

比做一个漂亮得多

$var = $myClass->fetchUsers();
foreach($var as $user){}
于 2012-07-31T13:49:04.170 回答