在物件導向程式設計中,子類別繼承其父類別的屬性和方法。然而,直接在子類別中存取父類別變數有時會帶來挑戰。
考慮以下程式碼片段,其中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中文網其他相關文章!