我尝试搜索此问题,但坦率地说,我不知道要搜索什么,但不幸的是,我想这个问题曾被问过。
在PHP和其他语言中,为什么在创建对象后不能立即使用它?
// This causes an error
$obj = new Object()->myFunction();
注意:我会在大多数设置函数中返回
$this
,因此可以将它们链接在一起function myFunction() {
// ... some more code here ...
return $this;
}
最佳答案
这只是PHP中的无效语法。通过将对象构造函数表达式括在括号中,可以使它在PHP 5.4中起作用:
$obj = (new Object())->myFunction();
参见PHP 5.4 new features:
- Class member access on instantiation has been added, e.g.
(new Foo)->bar()
.
如果希望
$obj
为新Object的值,请确保从$this
返回Object::myFunction()
(这称为method chaining)。使构造函数链起作用的另一种方法是在您的类中使用一个静态方法,该方法为您创建新的类实例:
class Object {
public function __construct($var) {
$this->var = $var;
}
public static function newObject($var) {
return new Object($var);
}
}
$obj = Object::newObject()->chainMethodX()->chainMethodY()->...
关于php - 为什么构造对象时不能使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17052302/