⊗ppOpIhPPP 33 of 107 menu

Le problème des propriétés privées lors de l'héritage en POO en PHP

Le fait que les propriétés privées ne soient pas héritées peut mener à un problème inattendu. Regardons un exemple. Supposons que nous ayons la classe parente suivante avec une propriété privée :

<?php class User { private $age; public function setAge($age) { $this->age = $age; } public function getAge() { return $this->age; } } ?>

Supposons que dans la classe enfant nous ayons décidé de créer une méthode qui augmentera l'âge de un an. Cependant, la tentative de modifier la propriété privée du parent entraînera une erreur :

<?php class Student extends User { public function incAge() { $this->age++; // erreur } } ?>

L'erreur disparaîtra si dans la classe enfant on déclare la propriété privée $age :

<?php class Student extends User { private $age; public function incAge() { $this->age++; } } ?>

C'est là que le piège nous attend ! En réalité, nous avons créé deux propriétés privées : une dans le parent et une dans l'enfant. Et elles fonctionnent complètement indépendamment. Cela signifie que les méthodes du parent modifieront leur propriété, et les méthodes de l'enfant - les leurs.

Ce problème a en réalité une solution. Il suffit de manipuler les propriétés privées du parent via les méthodes de ce parent. Réécrivons notre code en conséquence :

<?php class Student extends User { public function incAge() { $age = $this->getAge(); $age++; $this->setAge($age); } } ?>

On peut simplifier :

<?php class Student extends User { public function incAge() { $this->setAge($this->getAge() + 1); } } ?>

Dans le code suivant, dans la classe enfant, la méthode du parent est redéfinie. Corrigez les problèmes dans ce code :

<?php class User { private $name; public function setName($name) { $this->name = $name; } public function getName() { return $this->name; } } class Employee extends User { public function setName($name) { if (strlen($name) > 0) { $this->name = $name; // erreur } } } ?>
Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser