⊗ppOpIhPPP 33 of 107 menu

Problemet med privata egenskaper vid arv i OOP i PHP

Det faktum att privata egenskaper inte ärvs kan leda till ett oväntat problem. Låt oss titta på ett exempel. Antag att vi har följande föräldraklass med en privat egenskap:

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

Antag att vi i barnklassen bestämde oss för att skapa en metod som skulle öka åldern med ett. Men ett försök att ändra förälderns privata egenskap kommer att leda till ett fel:

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

Felet försvinner om i barnklassen deklareras den privata egenskapen $age:

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

Det är här fällan lurar! I verkligheten skapade vi två privata egenskaper: en i föräldern och en i barnet. Och de fungerar helt oberoende. Det betyder att förälderns metoder kommer att ändra sin egen egenskap, och barnets metoder - sina egna.

Detta problem har faktiskt en lösning. Man behöver bara manipulera förälderns privata egenskaper genom förälderns metoder. Låt oss skriva om vår kod i enlighet med detta:

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

Kan förenklas:

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

I följande kod i barnklassen åsidosätts förälderns metod. Rätta till problemen i denna kod:

<?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; // fel } } } ?>
Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa