⊗ppOpIhPPP 33 of 107 menu

A privát tulajdonságok örökléssel kapcsolatos problémája az OOP-ban PHP-ben

Az, hogy a privát tulajdonságok nem öröklődnek, váratlan problémához vezethet. Nézzük meg ezt egy példán keresztül. Tegyük fel, hogy a következő szülő osztályunk van egy privát tulajdonsággal:

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

Tegyük fel, hogy a gyermek osztályban úgy döntöttünk, hogy készítünk egy metódust, amely eggyel növeli a kort. Mindazonáltal, a szülő privát tulajdonságának megváltoztatására tett kísérlet hibához vezet:

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

A hiba eltűnik, ha a gyermek osztályban deklaráljuk a $age privát tulajdonságot:

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

Itt vár ránk a csapda! Valójában két privát tulajdonságot hoztunk létre: egyet a szülőben és egyet a gyermekben. És ezek teljesen függetlenül működnek. Ez azt jelenti, hogy a szülő metódusai a saját tulajdonságukat módosítják, a gyermek metódusai pedig a sajátjaikat.

Ennek a problémának valójában van megoldása. Egyszerűen a szülő privát tulajdonságaival a szülő metódusain keresztül kell dolgozni. Írjuk át a kódunkat ennek megfelelően:

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

Le lehet egyszerűsíteni:

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

A következő kódban a gyermek osztályban felülírjuk a szülő metódusát. Javítsa ki a problémákat ebben a kódban:

<?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; // hiba } } } ?>
Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás