⊗ppOpIhPPP 33 of 107 menu

Problemet med private egenskaber ved nedarvning i OOP i PHP

At private egenskaber ikke nedarves, kan føre til et uventet problem. Lad os se på et eksempel. Lad os sige, at vi har følgende forældreklasse med en privat egenskab:

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

Lad os sige, at vi i barneklassen besluttede os for at lav en metode, der vil forøge alderen med en. Men et forsøg på at ændre forælderens private egenskab vil føre til en fejl:

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

Fejlen forsvinder, hvis du i barneklassen erklærer den private egenskab $age:

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

Det er her fælden venter på os! Faktisk har vi skabt to private egenskaber: en i forælderen og en i barnet. Og de fungerer fuldstændig uafhængigt. Det betyder, at forælderens metoder vil ændre dens egenskab, og barnets metoder - deres egen.

Dette problem har faktisk en løsning. Du skal blot manipulere forælderens private egenskaber gennem forælderens metoder. Lad os omskrive vores kode i overensstemmelse hermed:

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

Kan forenkles:

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

I følgende kode i barneklassen bliver forælderens metode overskrevet. Ret problemerne i denne 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; // fejl } } } ?>
Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis