⊗ppOpIhPPP 33 of 107 menu

Die probleem van private eienskappe by oorerwing in OOP in PHP

Die feit dat private eienskappe nie oorgeerf word nie, kan tot 'n onverwagte probleem lei. Kom ons kyk na 'n voorbeeld. Gestel ons het die volgende ouerklas met 'n private eienskap:

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

Gestel ons besluit in die afgeleide klas om 'n metode te maak wat die ouderdom met een sal verhoog. Maar, 'n poging om die private eienskap van die ouer te verander sal tot 'n fout lei:

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

Die fout sal verdwyn as jy in die afgeleide klas die private eienskap $age verklaar:

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

Dis hier waar die strik op ons wag! Eintlik het ons twee private eienskappe geskep: een in die ouer en een in die afstammeling. En hulle werk heeltemal onafhanklik. Dit beteken dat die metodes van die ouer hul eie eienskap sal verander, en die metodes van die afstammeling - hulle s'n.

Hierdie probleem het eintlik 'n oplossing. Jy moet net die private eienskappe van die ouer manipuleer deur die metodes van daardie ouer. Kom ons herskryf ons kode volgens dit:

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

Kan vereenvoudig word:

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

In die volgende kode in die afgeleide klas word die metode van die ouer oorverteenwoordig. Korrigeer die probleme in hierdie kode:

<?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 } } } ?>
Afrikaans
AzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ons gebruik koekies vir die werking van die webwerf, ontleding en personalisering. Die verwerking van data geskied volgens die Privaatheidsbeleid.
aanvaar alles instel verwerp