⊗ppOpIhPPP 33 of 107 menu

Das Problem privater Eigenschaften bei der Vererbung in OOP in PHP

Dass private Eigenschaften nicht vererbt werden, kann zu einem unerwarteten Problem führen. Schauen wir uns ein Beispiel an. Nehmen wir an, wir haben die folgende Elternklasse mit einer privaten Eigenschaft:

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

Nehmen wir an, wir möchten in der Kindklasse eine Methode erstellen, die das Alter um eins erhöht. Der Versuch, die private Eigenschaft des Elternteils zu ändern, führt jedoch zu einem Fehler:

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

Der Fehler verschwindet, wenn in der Kindklasse die private Eigenschaft $age deklariert wird:

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

Hier lauert die Falle! Tatsächlich haben wir zwei private Eigenschaften erzeugt: eine im Elternteil und eine im Kind. Und diese arbeiten völlig unabhängig voneinander. Das bedeutet, dass die Methoden des Elternteils seine Eigenschaft ändern und die Methoden des Kindes - seine eigene.

Dieses Problem hat tatsächlich eine Lösung. Man muss einfach die privaten Eigenschaften des Elternteils über die Methoden dieses Elternteils manipulieren. Schreiben wir unseren Code entsprechend um:

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

Man kann es vereinfachen:

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

Im folgenden Code wird in der Kindklasse die Methode des Elternteils überschrieben. Korrigieren Sie die Probleme in diesem Code:

<?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; // Fehler } } } ?>
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen