Php 为什么可以';当我构造一个对象时,我不能使用它吗?
我已经试着寻找这个问题,但坦率地说,我不知道要寻找什么,不幸的是,我想这个问题以前有人问过 在PHP和其他语言中,为什么不能在创建对象后立即使用它Php 为什么可以';当我构造一个对象时,我不能使用它吗?,php,oop,syntax-error,Php,Oop,Syntax Error,我已经试着寻找这个问题,但坦率地说,我不知道要寻找什么,不幸的是,我想这个问题以前有人问过 在PHP和其他语言中,为什么不能在创建对象后立即使用它 // This causes an error $obj = new Object()->myFunction(); 注意:我在大多数setter函数中返回$this,以便将它们链接在一起 function myFunction() { // ... some more code here ... return $this;
// This causes an error
$obj = new Object()->myFunction();
注意:我在大多数setter函数中返回$this
,以便将它们链接在一起
function myFunction() {
// ... some more code here ...
return $this;
}
这是无效的语法 PHP仅支持:
$obj = new Object();
$obj->myFunction();
请记住,如果您编写示例代码来工作,
$obj
将获得myFunction()
的返回值,这是无效语法
PHP仅支持:
$obj = new Object();
$obj->myFunction();
请记住,如果编写示例代码,那么,
$obj
将获得myFunction()
的返回值,这在PHP中是无效的语法。在PHP5.4中,您可以通过用括号包装对象构造函数表达式来实现这一点:
$obj = (new Object())->myFunction();
见:
- 已添加实例化时的类成员访问权限,例如
(new Foo)->bar()
$obj
作为新对象的值,请确保从Object::myFunction()
返回$this
(此函数被调用)
让构造函数链接起作用的另一种方法是在类中使用静态方法,该方法为您创建新的类实例:
class Object {
public function __construct($var) {
$this->var = $var;
}
public static function newObject($var) {
return new Object($var);
}
}
$obj = Object::newObject()->chainMethodX()->chainMethodY()->...
这在PHP中只是无效的语法。在PHP5.4中,您可以通过用括号包装对象构造函数表达式来实现这一点:
$obj = (new Object())->myFunction();
见:
- 已添加实例化时的类成员访问权限,例如
(new Foo)->bar()
$obj
作为新对象的值,请确保从Object::myFunction()
返回$this
(此函数被调用)
让构造函数链接起作用的另一种方法是在类中使用静态方法,该方法为您创建新的类实例:
class Object {
public function __construct($var) {
$this->var = $var;
}
public static function newObject($var) {
return new Object($var);
}
}
$obj = Object::newObject()->chainMethodX()->chainMethodY()->...
虽然没有在站点上记录,但对象操作符
->
的优先级似乎高于new关键字。这么说:
$obj = new Object()->someFunction();
就像你写的那样进行评估
$obj = new (Object()->someFunction());
而不是预期的
$obj = (new Object())->someFunction();
它以这种方式工作的真正原因是在第775行中,尽管没有在网站上记录,但它看起来好像对象操作符->比新关键字具有更高的优先级。这么说:
$obj = new Object()->someFunction();
就像你写的那样进行评估
$obj = new (Object()->someFunction());
而不是预期的
$obj = (new Object())->someFunction();
它以这种方式工作的真正原因是在线775谢谢Fritz!我的问题是为什么PHP不支持new Object()->myFunction()?答案是:因为。我的许多setter函数
返回$this
这样我就可以将函数链接在一起,这样就可以使$obj
等于myFunction()
的返回值。酷:)fluent API非常流行。谢谢Fritz!我的问题是为什么PHP不支持new Object()->myFunction()?答案是:因为。我的许多setter函数返回$this
这样我就可以将函数链接在一起,这样就可以将myFunction()的返回值与myFunction()的返回值相等。。。只有当myFunction返回$thisThank@Orangepill时,才会是对象。我在问题中忘记提到这一点。我再加上now@Orangepill我想知道,这种奇怪的语法怎么用。构造函数就是为此而发明的。@Tim Cooper(new Foo)->bar()
和(new Foo())->bar()
之间有什么区别吗?@chrislondon:没有。在这两种情况下,它们都调用类的构造函数。值得注意的是,$obj将被myFunction的返回填充。。。只有当myFunction返回$thisThank@Orangepill时,才会是对象。我在问题中忘记提到这一点。我再加上now@Orangepill我想知道,这种奇怪的语法怎么用。构造函数就是为此而发明的。@Tim Cooper(new Foo)->bar()
和(new Foo())->bar()
之间有什么区别吗?@chrislondon:没有。在这两种情况下,它们都调用类的构造函数。您可能想链接到。声明T_新令牌并不是“它以这种方式工作的真正原因”。您可能想链接到。宣布T_新代币并不是“它以这种方式工作的真正原因”。