Heim > Backend-Entwicklung > PHP-Tutorial > Wann werden die magischen Methoden „__get' und „__set' von PHP tatsächlich aufgerufen?

Wann werden die magischen Methoden „__get' und „__set' von PHP tatsächlich aufgerufen?

Patricia Arquette
Freigeben: 2024-11-15 12:53:02
Original
346 Leute haben es durchsucht

When are PHP's `__get` and `__set` magic methods actually invoked?

PHP Magic-Methoden: Enthüllung von __get und __set für das Überladen von Eigenschaften

In PHP bieten die magischen Methoden __get und __set eine alternative Möglichkeit zur Handhabung Zugriff auf und Änderung von Eigenschaften über herkömmliche Getter und Setter hinaus. Mit diesen Methoden können Entwickler das Verhalten des Eigenschaftszugriffs abfangen und anpassen, wenn die angeforderte Eigenschaft nicht explizit definiert ist.

Ein häufiges Missverständnis besteht jedoch darin, dass die Methoden __get und __set zum Überladen der Schlüsselwörter get und set verwendet werden. Das ist nicht ganz korrekt.

Eigenschaftsüberladung und magische Methoden

Während die Methoden __get und __set für eine Form der Eigenschaftsüberladung verwendet werden können, unterscheiden sie sich von der typischen Überladung Methoden in anderen Sprachen. PHP verwaltet den Zugriff auf Eigenschaften explizit über öffentliche, geschützte und private Eigenschaftsdeklarationen. Wenn eine Eigenschaft nicht innerhalb eines bestimmten Bereichs deklariert ist, generiert PHP einen Fehler.

Magische Methoden kommen ins Spiel, wenn PHP versucht, auf eine Eigenschaft zuzugreifen, die nicht explizit deklariert ist. In diesem Fall bieten die Methoden __get und __set eine Möglichkeit, den Eigenschaftszugriff dynamisch zu handhaben.

Verwendung von __get und __set

Um die Verwendung der Methoden __get und __set zu veranschaulichen, Betrachten Sie das folgende Beispiel:

class foo {
    public $bar;  // Public property
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;  // Custom behavior for accessing inaccessible properties
    }
    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;  // Custom behavior for setting inaccessible properties
    }
}
Nach dem Login kopieren

In diesem Szenario sind die Methoden __get und __set so konzipiert, dass sie benutzerdefiniertes Verhalten beim Zugriff auf oder beim Ändern der Eigenschaft $bar bereitstellen. Wenn Sie beispielsweise echo $foo->bar; würde die __get-Methode auslösen, während $foo->bar = 'test'; würde die __set-Methode beinhalten.

Debugging und häufige Fallstricke

Allerdings, wie in der ursprünglichen Frage beschrieben, wenn die Eigenschaft bereits öffentlich deklariert ist (wie in diesem Beispiel) , würde die PHP-Laufzeit direkt auf diese Eigenschaft zugreifen. Daher würden die Methoden __get und __set nicht aufgerufen.

Dieses Verhalten wird im Abschnitt zum Überladen von Eigenschaften im PHP-Handbuch bestätigt, in dem es heißt, dass die Methoden __set und __get nur aufgerufen werden, wenn Daten in unzugängliche Eigenschaften geschrieben oder gelesen werden. keine öffentlichen Eigenschaften.

Magische Methoden sollten im Allgemeinen nicht als Ersatz für ordnungsgemäße Getter- und Setter-Funktionen oder direkte Methodenaufrufe angesehen werden. Sie dienen in erster Linie dem Zweck, ungültige Eigentumszugriffe zu handhaben und in solchen Szenarien alternative Verhaltensweisen bereitzustellen. Darüber hinaus ist es wichtig zu beachten, dass magische Methoden im Vergleich zum direkten Zugriff auf Eigenschaften zu Leistungseinbußen führen können.

Um das in der ursprünglichen Frage aufgetretene Problem zu beheben, können explizite Getter- und Setter-Methoden definiert werden, die das direkt verarbeiten würden Zugang und Änderung von Eigentum. Dieser Ansatz ist effizienter und bietet eine bessere Kontrolle über die Semantik des Eigenschaftszugriffs.

Das obige ist der detaillierte Inhalt vonWann werden die magischen Methoden „__get' und „__set' von PHP tatsächlich aufgerufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage