实例化时的PHP类成员访问

Jér*_*ont 2 php oop

我有PHP 5.4的新语法的问题我的代码在实例化时具有成员访问权限

$oClass = (new Foo)->bar();
$oClass->bar2();
Run Code Online (Sandbox Code Playgroud)

我收到这个错误

致命错误:在非目标上调用成员函数bar2()

为什么?

编辑:我添加return $this;了方法Foo :: bar(),现在它的工作原理

Lei*_*igh 9

我的猜测是你认为$oClass会包含一个对象.不是这种情况; 它包含函数的结果bar().

如果您想要访问bar2(),则需要正常执行以下操作:

$oClass = new Foo;
$oClass->bar();
$oClass->bar2();
Run Code Online (Sandbox Code Playgroud)

实例化时的类成员访问权限是指您只需要访问该对象的单个成员,然后您不再需要该对象.

编辑:
我可能忽视了一些事情.

请考虑以下代码:

class Test {
    public function foo() {
        return $this;
    }

    public function bar() {
        return 'oh hai';
    }
}

$t = (new Test)->foo();

print $t->bar();
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您仍然可以访问该对象,因为该函数foo()返回$this并存储它,保持对该对象的引用.

如果你真的想要,你也可以链接这样的方法:

print (new Test)->foo()->bar();
Run Code Online (Sandbox Code Playgroud)