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!