Schreiben von Eigenschaften durch Magie in OOP in PHP
Die magische Methode __set wird aufgerufen,
beim Versuch, den Wert einer nicht vorhandenen
oder versteckten Eigenschaft zu ändern. Als Parameter
akzeptiert sie den Namen der Eigenschaft und den Wert,
der ihr zugewiesen werden soll.
Schauen wir uns ein praktisches Beispiel an.
Nehmen wir an, wir haben die folgende Klasse Test:
<?php
class Test
{
private $prop1;
private $prop2;
}
?>
Erstellen wir in dieser Klasse eine magische
Methode __set, die mit der Funktion
var_dump den Namen der Eigenschaft,
auf die zugegriffen wurde, und den Wert,
der dieser Eigenschaft zugewiesen werden soll, ausgibt:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
var_dump($property . ' ' .$value);
}
}
?>
Testen wir die Funktionsweise unserer Klasse:
<?php
$test = new Test;
$test->prop = 'value'; // var_dump der Methode __set gibt 'prop value' aus
?>
Lassen Sie uns nun den Wert einer Eigenschaft setzen,
deren Name in der Variable $property gespeichert ist:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value; // setzen den Wert
}
}
?>
Jetzt können wir von außerhalb der Klasse in private Eigenschaften schreiben:
<?php
$test = new Test;
$test->prop1 = 1; // schreibt 1
$test->prop2 = 2; // schreibt 2
?>
Schreiben können wir, jedoch können wir nicht überprüfen, ob etwas dort geschrieben wurde, da die Eigenschaften privat sind.
Man kann einen Getter für diese Eigenschaften erstellen oder
einfach die magische Methode __get verwenden. Verwenden wir die zweite Option:
<?php
class Test
{
private $prop1;
private $prop2;
public function __set($property, $value)
{
$this->$property = $value;
}
// Magischer Getter für Eigenschaften:
public function __get($property)
{
return $this->$property;
}
}
?>
Jetzt können wir die Funktionsweise unserer Klasse überprüfen. Testen wir:
<?php
$test = new Test;
$test->prop1 = 1; // schreibt 1
$test->prop2 = 2; // schreibt 2
echo $test->prop1; // gibt 1 aus
echo $test->prop2; // gibt 2 aus
?>
Eigentlich sollte man natürlich nicht zulassen, dass jeder in private Eigenschaften schreiben kann, sonst geht der Sinn dieser privaten Eigenschaften verloren (einfacher ist es, sie öffentlich zu machen und das war's).
Daher sollte diese Methode nur angewendet werden, wenn es wirklich notwendig ist. In den folgenden Lektionen werden wir weitere Beispiele für eine gelungene Anwendung betrachten.