PHP中奇怪的类创建

时间:2013-04-19 07:11:09

标签: php

我正在研究一些PHP代码并遇到过这一行,我不确定语法是什么意思。

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

这里发生了什么?我习惯于看到实例化的类,以及像这样调用的方法:

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

5 个答案:

答案 0 :(得分:2)

该类已启动,但之后没有引用继续使用该类。 $ someClass将包含someMethod(10)返回的值。

答案 1 :(得分:2)

这只是简单的速记符号。假设您需要调用类bar的方法Foo。为此,您需要实例化Foo

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

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这与:

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

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

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