„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 19.11.2024
Durchsuche:813

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

Magische PHP-Methoden: __get und __set für das Überladen von Eigenschaften enthüllen

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.

Magic-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
    }
}

In diesem Szenario dienen die Methoden __get und __set dazu, benutzerdefiniertes Verhalten beim Zugriff auf oder beim Ändern der Eigenschaft $bar bereitzustellen. Rufen 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.

Im Allgemeinen sollten magische Methoden nicht als Ersatz für richtige 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.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3