我正在研究一些PHP代码并遇到过这一行,我不确定语法是什么意思。
$someclass = (new SomeClass())->someMethod(10);
这里发生了什么?我习惯于看到实例化的类,以及像这样调用的方法:
$someclass = new SomeClass();
$someClass->someMethod(10);
答案 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)
答案 3 :(得分:0)
new SomeClass()
返回指向该类的新实例的指针。代码不是将其分配给变量,而是在新形成的实例中调用方法并返回该值。不保留新实例的句柄。如果它是C ++它会泄漏内存,但我很确定PHP会立即清理..
答案 4 :(得分:0)
这与:
相同$object1 = new SomeClass();
$someclass = $object1->someMethod(10);
$someclass
应该是someMethod
的返回值。实际值和类取决于someMethod
的编写方式。
在某些实践中,someMethod
可能会返回对象实例本身。但这不是必须的。请仔细阅读someMethod
。