
Druckansicht von http://www.php-homepage.de/manual/language.oop5.magic.php
Magische MethodenDie Funktionen __construct(), __destruct(), __call(), __callStatic(), __get(), __set(), __isset(), __unset(), __sleep(), __wakeup(), __toString(), __invoke(), __set_state() and __clone() sind in PHP-Klassen magisch. Man kann keine Funktionen gleichen Namens in einer seiner Klassen haben, wenn man nicht die magische Funktionalität, die sie mit sich bringen, haben will. Achtung
PHP reserviert alle Funktionsnamen, die mit __ beginnen, als magisch. Es wird empfohlen, keine Funktionsnamen mit __ in PHP zu benutzen, es sei denn, man möchte dokumentierte magische Funktionalität verwenden. __sleep() and __wakeup()
public array __sleep
( void
)
void __wakeup
( void
)
serialize() prüft, ob Ihre Klasse eine Funktion mit dem
magischen Namen __sleep() besitzt. Wenn
dem so ist, wird die Funktion vor jeder Serialisierung ausgeführt. Sie kann
das Objekt aufräumen und es wird von ihr erwartet, dass sie ein Array mit den
Namen aller Variablen zurückliefert, die serialisiert werden sollen. Wenn die
Methode nichts zurückgibt, so wird
Die beabsichtigte Verwendung von __sleep() ist, nicht gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. Die Funktion ist ebenfalls nützlich, wenn Sie sehr große Objekte haben, welche nicht komplett gespeichert werden müssen. Umgekehrt überprüft unserialize() die Anwesenheit einer Funktion mit dem magischen Namen __wakeup(). Falls vorhanden, kann diese Funktion alle Ressourcen, die das Objekt haben könnte, wiederherstellen. Der beabsichtigte Zweck von __wakeup() ist es, alle Datenbankverbindungen wiederherzustellen, die während der Serialisierung verloren gegangen sein könnten, oder auch andere Aufgaben zur erneuten Initialisierung. Beispiel #1 Sleep- und Wakeup-Beispiel
<?php__toString()
public string __toString
( void
)
Die __toString() Methode erlaubt
einer Klasse zu entscheiden, wie sie reagieren soll, wenn sie in eine Zeichenkette
umgewandelt wird. Die beeinflusst beispielsweise, was echo $obj;
ausgeben wird. Diese Methode muss eine Zeichenkette zurückgeben, ansonsten wird ein
Beispiel #2 Einfaches Beispiel
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: Hallo
Es muss angemerkt werden, dass die __toString()
Methode in Versionen vor PHP 5.2.0 nur in direkter Kombination mit
echo oder print aufgerufen
wurde.
Beginnend mit PHP 5.2.0 erfolgt dieser Aufruf in jedem Stringkontext
(z.B. in printf() mit %s-Platzhalter),
aber in keinem der anderen Typenkontexte (z.B. mit dem
%d-Platzhalter). Ebenfalls beginnend mit PHP 5.2.0
bewirkt die Umwandlung eines Objekts ohne __toString()
Methode in einen String einen Fehler der Klasse __invoke()Die __invoke()-Methode wird aufgerufen, wenn ein Skript versucht, ein Objekt als Funktion aufzurufen.
Beispiel #3 Nutzung von __invoke()
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe: int(5) bool(true) __set_state()
static object __set_state
( array
$properties
)Diese statische Methode wird seit PHP 5.1.0 für Klassen aufgerufen, die mittels var_export() exportiert werden. Der einzige Parameter dieser Methode ist ein Array, welches aus exportierten Eigenschaften der Form array('Eigenschaft' => Wert, ...) besteht. Beispiel #4 Verwendung von __set_state() (seit PHP 5.1.0)
<?phpDas oben gezeigte Beispiel erzeugt folgende Ausgabe:
object(A)#2 (2) {
["var1"]=>
int(5)
["var2"]=>
string(3) "foo"
}
|