簡體   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