繁体   English   中英

实例化PHP类成员访问

[英]PHP Class member access on instantiation

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

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

我收到这个错误

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

为什么?

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

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

如果要访问bar2() ,则需要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();

这个怎么样?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM