Bei der objektorientierten Programmierung erben untergeordnete Klassen die Eigenschaften und Methoden ihrer übergeordneten Klassen. Allerdings kann der Zugriff auf übergeordnete Klassenvariablen direkt innerhalb der untergeordneten Klasse manchmal eine Herausforderung darstellen.
Bedenken Sie den folgenden Codeausschnitt, in dem Klasse B Klasse A erweitert:
<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>
Frage:
Warum gibt die Zeile ein Echo parent::$bb; zu einem schwerwiegenden Fehler führen? Wie können wir auf die übergeordnete Variable $bb in der untergeordneten Klasse zugreifen?
Antwort:
Der Fehler tritt auf, weil $bb eine geschützte Eigenschaft der Klasse A und geschützt ist Auf Eigenschaften kann nicht direkt von außerhalb der Klasse oder Unterklassen mithilfe der parent::-Syntax zugegriffen werden. Stattdessen können wir mit der folgenden Syntax auf $bb zugreifen:
<code class="php">echo $this->bb;</code>
Erklärung:
Das Schlüsselwort $this bezieht sich auf das aktuelle Objekt. Da $bb von Klasse B geerbt wird und Teil des aktuellen Objekts wird, können wir mit $this darauf zugreifen. Diese Syntax greift effektiv auf die geerbte Variable zu, als wäre sie eine Eigenschaft der untergeordneten Klasse.
Zusätzliche Informationen zu parent::
Die parent::-Syntax ist gewohnt Greifen Sie innerhalb der untergeordneten Klasse auf Methoden oder Eigenschaften der übergeordneten Klasse zu. Es wird normalerweise verwendet, wenn Sie eine Methode aus der übergeordneten Klasse überschreiben oder ihr zusätzliche Funktionalität hinzufügen möchten.
Bedenken Sie beispielsweise den folgenden Code:
<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>
In diesem Fall ist die Die __construct()-Methode der Bomber-Klasse überschreibt die __construct()-Methode der übergeordneten Klasse, verwendet sie jedoch weiterhin, um die Piloteigenschaft zu initialisieren.
Das obige ist der detaillierte Inhalt vonWie greife ich auf geschützte übergeordnete Klassenvariablen in PHP-Unterklassen zu?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!