首頁  >  文章  >  後端開發  >  如何在 PHP 子類別中存取受保護的父類別變數?

如何在 PHP 子類別中存取受保護的父類別變數?

Patricia Arquette
Patricia Arquette原創
2024-10-23 00:44:03289瀏覽

How to Access Protected Parent Class Variables in PHP Subclasses?

在 PHP 中存取父類別變數

在物件導向程式設計中,子類別繼承其父類別的屬性和方法。然而,直接在子類別中存取父類別變數有時會帶來挑戰。

考慮以下程式碼片段,其中B 類擴展了A 類:

<code class="php">class A {
    private $aa;
    protected $bb = 'parent bb';
    function __construct($arg) {}
    private function parentmethod($arg2) {}
}

class B extends A {
    function __construct($arg) {
        parent::__construct($arg);
    }
    function childfunction() {
        echo parent::$bb; //Fatal error: Undefined class constant 'bb' 
    }
}

$test = new B($some);
$test->childfunction();</code>

問題:

為什麼該行會echoparent::$ bb;導致致命錯誤?如何在子類別中存取父變數 $bb?

答案:

出現錯誤是因為$bb 是A 類別的protected 屬性,而protected不能使用parent:: 語法從類別或子類別外部直接存取屬性。相反,我們可以使用以下語法存取 $bb:

<code class="php">echo $this->bb;</code>

說明:

$this 關鍵字引用當前物件。由於$bb被類別B繼承並成為當前物件的一部分,因此我們可以使用$this存取它。此語法有效地存取繼承的變量,就好像它是子類別的屬性一樣。

有關父類別的附加資訊::

parent:: 語法用於從子類別中存取父類別的方法或屬性。當您想要重寫父類別的方法或向其添加額外的功能時,通常會使用它。

例如,考慮以下程式碼:

<code class="php">class Airplane {
    private $pilot;
    public function __construct( $pilot ) {
        $this->pilot = $pilot;
    }
}

class Bomber extends Airplane {
    private $navigator;
    public function __construct( $pilot, $navigator ) {
        $this->navigator = $navigator;
        parent::__construct( $pilot ); // Calls the parent constructor
    }
}</code>

在這種情況下, Bomber 類別的__construct() 方法覆寫了父類別的__construct() 方法,但仍然使用它來初始化Pilot 屬性。

以上是如何在 PHP 子類別中存取受保護的父類別變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn