⊗ppOpMgROP 89 of 107 menu

Schreibgeschützte Eigenschaften in OOP in PHP

Lassen Sie uns eine Klasse betrachten, in der alle Eigenschaften privat sind:

<?php class Test { private $prop1 = 1; private $prop2 = 2; } ?>

Lassen Sie uns nun diese Eigenschaften in der Außenwelt nur lesbar machen. Wir haben so etwas bereits früher gemacht, indem wir Getter für jede Eigenschaft erstellt haben und keine Setter erstellt haben.

Lassen Sie uns nun für die Lösung dieser Aufgabe die magische Methode __get verwenden. Wir werden darin den Wert der angefragten Eigenschaft zurückgeben. Wie man das macht: Der Name der angefragten Eigenschaft gelangt in den Parameter der Methode __get, in unserem Fall $property.

Das bedeutet, dass wir die Eigenschaft lesen können, deren Name in der Variable gespeichert ist, wie folgt: $this->$property (der Name der Eigenschaft wird eine Variable sein, also mit einem Dollar am Anfang, das haben wir in vorherigen Lektionen durchgenommen).

Lassen Sie uns die beschriebene Methode __get erstellen:

<?php class Test { private $prop1 = 1; private $prop2 = 2; public function __get($property) { return $this->$property; } } ?>

Verwenden wir sie zum Lesen der Eigenschaften:

<?php $test = new Test; echo $test->prop1; // gibt 1 aus echo $test->prop2; // gibt 2 aus ?>

Der Versuch, etwas in die Eigenschaft zu schreiben, führt zu einem Fehler:

<?php $test = new Test; $test->prop1 = 2; // wirft einen Fehler ?>

Das ist genau das, was wir brauchen: Die Eigenschaft kann gelesen, aber nicht geschrieben werden.

Der Versuch, eine nicht existierende Eigenschaft zu lesen, wirft einen Fehler:

<?php $test = new Test; echo $test->prop3; // wirft einen Fehler ?>

Achten Sie auch auf die folgende Nuance: Als wir die Eigenschaften schreibgeschützt auf die alte Weise gemacht haben, haben wir, um die Eigenschaft zu lesen, eine Getter-Methode verwendet.

In der neuen Weise werden wir uns direkt an die Eigenschaften wenden, als ob sie öffentlich wären. Aber schreiben können wir in sie nicht, als ob sie privat wären.

Gegeben sei die folgende Klasse User, deren Eigenschaften nur lesbar mit Hilfe von Gettern zugänglich sind:

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

Ändern Sie den Code dieser Klasse so, dass anstelle von Gettern die magische Methode __get verwendet wird.

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