⊗ppOpIhPPP 33 of 107 menu

Problém súkromných vlastností pri dedení v OOP v PHP

To, že súkromné vlastnosti nie sú dedené, môže viesť k nečakanému problému. Pozrime sa na príklad. Majme nasledujúcu rodičovskú triedu so súkromnou vlastnosťou:

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

Povedzme, že v potomkovej triede sme sa rozhodli vytvoriť metódu, ktorá bude zvyšovať vek o jednotku. Avšak, pokus zmeniť súkromnú vlastnosť rodiča povedie k chybe:

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

Chyba zmizne, ak v potomkovej triede deklarujeme súkromnú vlastnosť $age:

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

Tu na nás číha pasca! V skutočnosti sme vytvorili dve súkromné vlastnosti: jednu v rodičovi a jednu v potomkovi. A tieto fungujú úplne nezávisle. To znamená, že metódy rodiča budú meniť svoju vlastnosť a metódy potomka - svoje.

Tento problém má v skutočnosti riešenie. Jednoducho je potrebné manipulovať súkromné vlastnosti rodiča prostredníctvom metód tohto rodiča. Prepíšme náš kód v súlade s týmto:

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

Môžeme zjednodušiť:

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

V nasledujúcom kóde je v potomkovej triede predefinovaná metóda rodiča. Opravte problémy v tomto kóde:

<?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; // chyba } } } ?>
Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť