组合对象运算符( - >)和“new”

时间:2012-07-20 20:58:10

标签: php

给定具有成员函数f()的A类,以下显然是合理的代码:

( new A() )->f();

因语法错误而失败:“意外的T_OBJECT_OPERATOR”。

对此有解释吗?

编辑:正如Mageek猜测的那样,我正试图理解这种行为;我已经知道如何解决它。

2 个答案:

答案 0 :(得分:2)

这仅适用于PHP 5.4。在此之前,您必须将实例分配给变量并使用它。

请参阅:http://www.php.net/manual/en/migration54.new-features.php

答案 1 :(得分:0)

您要求的功能可从PHP 5.4获得。以下是PHP 5.4中的新功能列表:

http://docs.php.net/manual/en/migration54.new-features.php

  

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


但是你可以尝试这个技巧:

class TestClass {
    protected $_testvar;

    public function __construct($param) {
        $this->_testvar = $param;
    }
    public function testMethod() {
        return $this->_testvar;
    }
}

function TestClass($param) { return new TestClass($param); }

现在你可以写:

$a = TestClass(2)->testMethod();