为什么我在构造它时不能使用对象?

chr*_*don 1 php oop syntax-error

我已经尝试过搜索这个但坦率地说我不知道​​要搜索什么,不幸的是我想象这个问题之前已被问过.

在PHP和其他语言中,为什么我在创建对象后不能立即使用它?

// This causes an error
$obj = new Object()->myFunction();
Run Code Online (Sandbox Code Playgroud)

注意:我返回$this大部分的setter函数,所以我可以将它们链接在一起

function myFunction() {
    // ... some more code here ...

    return $this;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*per 6

它只是PHP中无效的语法.通过用括号包装对象构造函数表达式,您可以在PHP 5.4中使用它:

$obj = (new Object())->myFunction();
Run Code Online (Sandbox Code Playgroud)

请参阅PHP 5.4新功能:

  • 已添加实例化的类成员访问权限,例如(new Foo)->bar().

如果你想$obj成为新对象的价值,一定要返回$thisObject::myFunction()(这就是所谓的方法链接).

使构造函数链接起作用的另一种方法是在类中使用静态方法为您创建新的类实例:

class Object {
    public function __construct($var) {
        $this->var = $var;
    }
    public static function newObject($var) {
        return new Object($var);
    }
}

$obj = Object::newObject()->chainMethodX()->chainMethodY()->...
Run Code Online (Sandbox Code Playgroud)