0

我正在编写一些 PHP 代码并遇到了这一行,我不确定语法的含义。

$someclass = (new SomeClass())->someMethod(10);

这里发生了什么?我习惯于看到类被实例化,并且方法被这样调用:

$someclass = new SomeClass(); $someClass->someMethod(10);

4

5 回答 5

2

该类已启动,但没有保留以后使用该类的参考。$someClass 将包含 someMethod(10) 返回的值。

于 2013-04-19T07:13:50.220 回答
2

这只是同一事物的简写符号。假设您需要调用barclass 的方法Foo。为此,您需要实例化Foo

$foo  = new Foo;
$data = $foo->bar();

但你真的没有兴趣$foo,你只是想要$data。简写语法只是实例化类然后调用方法,而不需要创建和保留变量$foo

$data = (new Foo)->bar();
于 2013-04-19T07:14:15.830 回答
0

我认为你只能在 php >= 5.4 中做到这一点。

该类被实例化,然后someMethod在新实例上调用。然后将someMethod函数的结果存储到$someclass. (顺便说一下,这个变量的标题具有误导性)

快速测试:

<?php
class SomeClass {
    public function someMethod($val) {
        return $val * 42;
    }
}

$someclass = (new SomeClass())->someMethod(10);
var_dump($someclass);

输出:int(420)

http://ideone.com/Vebt4d

于 2013-04-19T07:14:47.413 回答
0

new SomeClass()返回指向类的新实例的指针。代码不是将其分配给变量,而是在新形成的实例中调用一个方法并返回该值。不保留新实例的句柄。如果它是 C++ 它会泄漏内存,但我很确定 PHP 会立即清理..

于 2013-04-19T07:14:59.897 回答
0

这与以下内容相同:

$object1 = new SomeClass();
$someclass = $object1->someMethod(10);

$someclass应该是 的返回值someMethod。实际值和类取决于如何someMethod编写。

在某些实践中,someMethod可能会返回对象实例本身。但这不是必须的。请someMethod仔细阅读。

于 2013-04-19T07:16:25.280 回答