


Comment accéder aux variables de classe parent protégées dans les sous-classes PHP ?
Oct 23, 2024 am 12:44 AMAccès aux variables de classe parent en PHP
Dans la programmation orientée objet, les classes enfants héritent des propriétés et des méthodes de leurs classes parents. Cependant, accéder aux variables de la classe parent directement au sein de la classe enfant peut parfois présenter des défis.
Considérez l'extrait de code suivant où la classe B étend la classe 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>
Question :
Pourquoi la ligne fait-elle écho à parent::$bb; entraîner une erreur fatale ? Comment pouvons-nous accéder à la variable parent $bb dans la classe enfant ?
Réponse :
L'erreur se produit car $bb est une propriété protégée de la classe A, et protégée les propriétés ne sont pas accessibles directement depuis l'extérieur de la classe ou des sous-classes en utilisant la syntaxe parent ::. Au lieu de cela, nous pouvons accéder à $bb en utilisant la syntaxe suivante :
<code class="php">echo $this->bb;</code>
Explication :
Le mot-clé $this fait référence à l'objet actuel. Puisque $bb est hérité par la classe B et devient une partie de l'objet actuel, nous pouvons y accéder en utilisant $this. Cette syntaxe accède efficacement à la variable héritée comme s'il s'agissait d'une propriété de la classe enfant.
Informations supplémentaires sur parent::
La syntaxe parent:: est utilisée pour accéder aux méthodes ou aux propriétés de la classe parent depuis la classe enfant. Il est généralement utilisé lorsque vous souhaitez remplacer une méthode de la classe parent ou y ajouter des fonctionnalités supplémentaires.
Par exemple, considérons le code suivant :
<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>
Dans ce cas, le La méthode __construct() de la classe Bomber remplace la méthode __construct() du parent, mais l'utilise toujours pour initialiser la propriété pilote.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

11 meilleurs scripts de raccourcissement d'URL PHP (gratuit et premium)

Travailler avec les données de session Flash dans Laravel

Misque de réponse HTTP simplifié dans les tests Laravel

Curl dans PHP: Comment utiliser l'extension PHP Curl dans les API REST

Construisez une application React avec un Laravel Back End: Partie 2, React

12 meilleurs scripts de chat PHP sur Codecanyon
