2

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

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

失败并出现语法错误:“意外的 T_OBJECT_OPERATOR”。

对此有解释吗?

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

4

2 回答 2

2

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

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

于 2012-07-20T21:02:10.173 回答
0

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

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

添加了对实例化的类成员访问,例如 (new 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();
于 2012-07-20T21:06:01.323 回答