⊗ppOpIhPPP 33 of 107 menu

Privačių savybių paveldėjimo problema OOP PHP

Tai, kad privačios savybės nepaveldimos, gali sukelti netikėtą problemą. Pažiūrėkime pavyzdžiu. Tarkime, mes turime šį tėvinę klasę su privačia savybe:

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

Tarkime, vaikinėje klasėje mes nusprendėme sukurti metodą, kuris padidins amžių vienetu. Tačiau bandymas pakeisti tėvinės klasės privačią savybę sukels klaidą:

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

Klaida išnyks, jei vaikinėje klasėje deklaruosite privačią savybę $age:

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

Štai čia mūsų ir laukia spastai! Iš tikrųjų mes sukūrėme dvi privačias savybes: vieną tėvinėje klasėje ir vieną vaikinėje klasėje. Ir jos veikia visiškai nepriklausomai. Tai reiškia, kad tėvinės klasės metodai keis savo savybę, o vaikinės klasės metodai - savo.

Ši problema iš tikrųjų turi sprendimą. Tiesiog reikia manipuliuoti tėvinės klasės privačiomis savybėmis per tos tėvinės klasės metodus. Perrašykime savo kodą pagal tai:

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

Galima supaprastinti:

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

Šiame kode vaikinėje klasėje perrašomas tėvinės klasės metodas. Ištaisykite problemas šiame 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; // klaida } } } ?>
Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti