Zugriff auf Eigenschaften durch Magie in OOP in PHP
Die nächste magische Methode, die wir
uns ansehen werden, heißt __get. Diese
Methode wird ausgelöst, wenn versucht wird, den Wert
einer privaten oder geschützten Eigenschaft auszulesen.
Wenn die Methode __get in einer Klasse implementiert wird,
dann werden alle Zugriffe auf nicht vorhandene
oder versteckte Eigenschaften von
dieser Methode verarbeitet.
Dabei übergibt PHP automatisch den Namen der angeforderten Eigenschaft als ersten Parameter dieser Methode, und der von dieser Methode zurückgegebene Wert wird als Wert der Eigenschaft interpretiert, auf die zugegriffen wurde.
Es ist wahrscheinlich noch nicht sehr verständlich, wie das
funktioniert, schauen wir uns deshalb ein praktisches
Beispiel an. Nehmen wir an, wir haben eine Klasse
Test mit einer privaten und einer öffentlichen
Eigenschaft:
<?php
class Test
{
public $prop1 = 1; // öffentliche Eigenschaft
private $prop2 = 2; // private Eigenschaft
}
?>
Fügen wir unserer Klasse die magische Methode
__get hinzu, die zunächst einfach
den Namen der Eigenschaft zurückgibt, auf die zugegriffen wurde:
<?php
class Test
{
public $prop1 = 1;
private $prop2 = 2;
public function __get($property)
{
return $property; // einfach den Eigenschaftsnamen zurückgeben
}
}
?>
Prüfen wir die Funktionsweise der erstellten magischen Methode. Greifen wir auf drei Arten von Eigenschaften zu: auf die öffentliche Eigenschaft, auf die private und auf eine nicht vorhandene:
<?php
$test = new Test;
// Zugriff auf öffentliche Eigenschaft:
echo $test->prop1; // gibt 1 aus - also den Wert der Eigenschaft
// Zugriff auf private Eigenschaft:
echo $test->prop2; // gibt 'prop2' aus - den Eigenschaftsnamen
// Zugriff auf nicht vorhandene Eigenschaft:
echo $test->prop3; // gibt 'prop3' aus - den Eigenschaftsnamen
?>
Wie Sie sehen, reagiert unsere magische Methode auf den Zugriff auf private und nicht vorhandene Eigenschaften, ignoriert aber den Zugriff auf öffentliche - diese funktionieren so, wie sie es vorher taten.