⊗ppOpIhPPP 33 of 107 menu

Het probleem van private eigenschappen bij overerving in OOP in PHP

Het feit dat private eigenschappen niet worden overgeërfd, kan tot een onverwacht probleem leiden. Laten we een voorbeeld bekijken. Stel dat we de volgende ouderklasse hebben met een private eigenschap:

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

Stel dat we in de subklasse een methode willen maken die de leeftijd met één verhoogt. Een poging om de private eigenschap van de ouder te wijzigen zal echter tot een fout leiden:

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

De fout verdwijnt als in de subklasse de private eigenschap $age wordt gedeclareerd:

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

Hier wacht ons de valkuil! In werkelijkheid hebben we twee private eigenschappen gegenereerd: één in de ouder en één in de subklasse. En deze werken volledig onafhankelijk. Dit betekent dat methoden van de ouder hun eigen eigenschap zullen wijzigen, en methoden van de subklasse - die van hen.

Dit probleem heeft eigenlijk een oplossing. Je moet gewoon de private eigenschappen van de ouder manipuleren via de methoden van die ouder. Laten we onze code herschrijven in overeenstemming hiermee:

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

Kan worden vereenvoudigd:

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

In de volgende code wordt in de subklasse de methode van de ouder overschreven. Verbeter de problemen in deze 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; // fout } } } ?>
Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren