⊗ppOpIhPPP 33 of 107 menu

Težava z zasebnimi lastnostmi pri dedovanju v OOP v PHP

Dejstvo, da se zasebne lastnosti ne dedujejo, lahko povzroči nepričakovano težavo. Poglejmo si primer. Recimo, da imamo naslednji starševski razred z zasebno lastnostjo:

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

Recimo, da smo v podrejenem razredu želeli narediti metodo, ki bo povečala starost za ena. Vendar poskus spreminjanja zasebne lastnosti starša bo povzročil napako:

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

Napaka bo izginila, če v podrejenem razredu deklariramo zasebno lastnost $age:

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

Tu nas čaka past! Pravzaprav smo ustvarili dve zasebni lastnosti: eno v staršu in eno v potomcu. In delujeta povsem neodvisno. To pomeni, da bodo metode starša spreminjale svojo lastnost, metode potomca pa svojo.

Ta težava ima pravzaprav rešitev. Preprosto je treba upravljati z zasebnimi lastnostmi starša prek metod tega starša. Prepišimo našo kodo v skladu s tem:

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

Lahko poenostavimo:

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

V naslednji kodi se v podrejenem razredu prepiše metoda starša. Popravite težave v tej kodi:

<?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; // napaka } } } ?>
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
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni