实例化时的PHP类成员访问

时间:2012-03-04 00:41:22

标签: php oop

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

$oClass = (new Foo)->bar();
$oClass->bar2();

我收到此错误

  

致命错误:在非目标

上调用成员函数bar2()

为什么?

编辑:我在方法Foo :: bar()中添加了return $this;,现在它可以正常工作

2 个答案:

答案 0 :(得分:9)

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

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

$oClass = new Foo;
$oClass->bar();
$oClass->bar2();

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

修改
我可能忽视了一些事情。

请考虑以下代码:

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

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

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

print $t->bar();

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

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

print (new Test)->foo()->bar();

答案 1 :(得分:-1)

这个怎么样?

($oClass = new Foo)->bar();
$oClass->bar2();