Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗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