[英]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.