Heim >Backend-Entwicklung >PHP-Tutorial >Überladen __get und __set wirklich nur Getter und Setter in PHP?

Überladen __get und __set wirklich nur Getter und Setter in PHP?

Barbara Streisand
Barbara StreisandOriginal
2024-11-12 14:34:02757Durchsuche

Are __get and __set Really Just Overloading Getters and Setters in PHP?

Magische Methoden: Enthüllung des wahren Zwecks von __get und __set in PHP

Die rätselhaften magischen Methoden __get und __set in PHP haben Entwickler fasziniert, Sie fragen sich über die beabsichtigte Funktionalität. Bis vor kurzem glaubte man, dass diese Methoden eine mühelose Überladung von Gettern und Settern ermöglichen. Die Realität zeichnet jedoch ein anderes Bild.

Die wahre Rolle magischer Methoden verstehen

Entgegen der landläufigen Annahme sind __get und __set in erster Linie für den Umgang mit Situationen konzipiert, in denen direkte Methoden erforderlich sind oder der Zugang zum Grundstück ist aufgrund von Zugänglichkeitsbeschränkungen eingeschränkt. Konkret:

  • __set wird aufgerufen, wenn versucht wird, in eine unzugängliche Eigenschaft zu schreiben.
  • __get wird verwendet, wenn Daten aus einer unzugänglichen Eigenschaft gelesen werden.

Beispiel

Betrachten Sie den folgenden Code Snippet:

class foo {
    public $bar;
    public function __get($name) {
        echo "Get:$name";
        return $this->$name;
    }

    public function __set($name, $value) {
        echo "Set:$name to $value";
        $this->$name = $value;
    }
}

$foo = new foo();
echo $foo->bar; // Fails
$foo->bar = 'test'; // Fails

In diesem Fall werden die Methoden __get und __set nicht aufgerufen, da die Eigenschaft $bar öffentlich zugänglich ist. Im PHP-Handbuch heißt es ausdrücklich: „Die magischen Methoden sind kein Ersatz für Getter und Setter. Sie ermöglichen Ihnen lediglich die Handhabung von Methodenaufrufen oder Eigenschaftszugriffen, die andernfalls zu einem Fehler führen würden.“

Auswirkungen auf die Leistung

Es ist wichtig zu beachten, dass magische Methoden mit Leistungseinbußen verbunden sind. Ihr Aufruf ist deutlich langsamer als die Verwendung geeigneter Getter, Setter oder direkter Methodenaufrufe. Daher sollten sie für Ausnahmefälle reserviert werden, in denen die Behandlung von Unzugänglichkeitsproblemen erforderlich ist.

Fazit

Während __get und __set wie eine praktische Lösung für Getter- und Setter-Überladung erscheinen können Ihr eigentlicher Zweck liegt in der Verwaltung von Zugangsbeschränkungen zu Grundstücken. Das Verständnis ihrer genauen Rolle ist für eine effektive PHP-Codeentwicklung von entscheidender Bedeutung. Indem Sie sich dieses Wissen zunutze machen, können Sie unnötige Leistungseinbußen vermeiden und die Codestabilität gewährleisten.

Das obige ist der detaillierte Inhalt vonÜberladen __get und __set wirklich nur Getter und Setter in PHP?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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