diff --git a/language/oop5/magic.xml b/language/oop5/magic.xml index 4257bec7c..fc4edb3e4 100644 --- a/language/oop5/magic.xml +++ b/language/oop5/magic.xml @@ -1,6 +1,5 @@ - - + @@ -27,10 +26,10 @@ __set(), __isset(), __unset(), - __sleep(), - __wakeup(), __serialize(), __unserialize(), + __sleep(), + __wakeup(), __toString(), __invoke(), __set_state(), @@ -67,101 +66,6 @@ - - - <link linkend="object.sleep">__sleep()</link> und - <link linkend="object.wakeup">__wakeup()</link> - - - - public array__sleep - - - - public void__wakeup - - - - - serialize prüft, ob die 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ückgibt, die serialisiert werden - sollen. Wenn die Methode nichts zurückgibt, wird &null; serialisiert und - eine E_NOTICE ausgegeben. - - - - __sleep() kann keine Namen von - privaten Eigenschaften in Elternklassen zurückgeben. Dies würde zu einem - Fehler der Stufe E_NOTICE führen. Stattdessen sollte - das Serializable-Interface verwendet werden. - - - - - Seit PHP 8.0.0 erzeugt die Rückgabe eines Wertes von - __sleep(), der kein Array ist, eine - Warnung; vorher führte dies zu einem Hinweis. - - - - Der Zweck von von __sleep() ist, nicht - gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. - Die Funktion ist ebenfalls nützlich, wenn ein sehr großes Objekt nicht - komplett gespeichert werden muss. - - - Umgekehrt überprüft unserialize, ob eine Funktion mit - dem magischen Namen __wakeup() - vorhanden ist. Falls vorhanden, kann diese Funktion alle Ressourcen, die - das Objekt möglicherweise hat, wiederherstellen. - - - Der Zweck von __wakeup() ist es, alle - Datenbankverbindungen, die bei der Serialisierung verlorengegangen sind, - wiederherzustellen und andere Aufgaben der erneuten Initialisierung - durchzuführen. - - - Sleep- und Wakeup-Beispiel - -dsn = $dsn; - $this->username = $username; - $this->password = $password; - $this->connect(); - } - - private function connect() - { - $this->link = new PDO($this->dsn, $this->username, $this->password); - } - - public function __sleep() - { - return array('dsn', 'username', 'password'); - } - - public function __wakeup() - { - $this->connect(); - } -}?> -]]> - - - - <link linkend="object.serialize">__serialize()</link> und @@ -273,6 +177,112 @@ class Connection </example> </sect2> + <sect2 xml:id="language.oop5.magic.sleep"> + <title> + <link linkend="object.sleep">__sleep()</link> und + <link linkend="object.wakeup">__wakeup()</link> + + + + + Dieser Serialisierungsmechanismus gilt seit PHP 8.5.0 als veraltet + (soft-deprecated). Er wird aus Gründen der Abwärtskompatibilität + beibehalten. Neuer und bestehender Code sollte jedoch stattdessen auf + die magischen Methoden __serialize() + und __unserialize() + umgestellt werden. + + + + + public array__sleep + + + + public void__wakeup + + + + + serialize prüft, ob die 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ückgibt, die serialisiert werden + sollen. Wenn die Methode nichts zurückgibt, wird &null; serialisiert und + eine E_NOTICE ausgegeben. + + + + __sleep() kann keine Namen von + privaten Eigenschaften in Elternklassen zurückgeben. Dies würde zu einem + Fehler der Stufe E_NOTICE führen. Stattdessen sollte + __serialize() verwendet werden. + + + + + Seit PHP 8.0.0 erzeugt die Rückgabe eines Wertes von + __sleep(), der kein Array ist, eine + Warnung; vorher führte dies zu einem Hinweis. + + + + Der Zweck von __sleep() ist, nicht + gespeicherte Daten zu sichern oder ähnliche Aufräumarbeiten zu erledigen. + Die Funktion ist ebenfalls nützlich, wenn ein sehr großes Objekt nicht + komplett gespeichert werden muss. + + + Umgekehrt überprüft unserialize, ob eine Funktion mit + dem magischen Namen __wakeup() + vorhanden ist. Falls vorhanden, kann diese Funktion alle Ressourcen, die + das Objekt möglicherweise hat, wiederherstellen. + + + Der Zweck von __wakeup() ist es, alle + Datenbankverbindungen, die bei der Serialisierung verlorengegangen sind, + wiederherzustellen und andere Aufgaben der erneuten Initialisierung + durchzuführen. + + + Sleep- und Wakeup-Beispiel + +dsn = $dsn; + $this->username = $username; + $this->password = $password; + $this->connect(); + } + + private function connect() + { + $this->link = new PDO($this->dsn, $this->username, $this->password); + } + + public function __sleep() + { + return array('dsn', 'username', 'password'); + } + + public function __wakeup() + { + $this->connect(); + } +}?> +]]> + + + + <link linkend="object.tostring">__toString()</link>