php - 为什么构造对象时不能使用它?

标签 php oop syntax-error

我尝试搜索此问题,但坦率地说,我不知道要搜索什么,但不幸的是,我想这个问题曾被问过。

在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/

相关文章:

php - 我如何让我的 Android 应用程序向 sqlserver 发送和接收数据/信息

php - 如何在 Zend Framework 中创建 Web 服务?

language-agnostic - 是否有一个应该设置传递对象的属性的方法的命名约定

python - 皮查姆 : Showing error in dict keyword?

syntax-error - Apple脚本:Find and replace not working

php - MySQL LIKE + php sprintf

php - 使用带有接口(interface)的 PHPUnit 代码覆盖率

php - 当闭包和反射可用时,PHP 中的 OOP 可见性有什么意义?

php - 为什么显示此解析错误?

PHP/MySQL : "Cannot add or update a child row: a foreign key constraint fails"