serialize
(PHP 4, PHP 5, PHP 7, PHP 8)
serialize — Erzeugt eine speicherbare Repräsentation eines Wertes
Beschreibung
Diese Funktion dient der Speicherung oder Übergabe von PHP-Werten, ohne
dass diese ihren Typ oder ihre Struktur verlieren.
Um eine serialisierte Zeichenkette wieder als PHP-Wert verfügbar zu machen,
verwenden Sie unserialize().
Parameter-Liste
value
-
Der zu serialisierende Wert. serialize() kann mit
allen Typen umgehen, ausgenommen mit dem resource-Typ und
einigen object-Typen (siehe Hinweis weiter unten). Sie können
sogar Arrays serialisieren, die Referenzen auf sich selbst enthalten.
Zirkelbezüge innerhalb des Arrays/Objekts, das Sie serialisieren, werden
ebenfalls gespeichert. Alle anderen Referenzen gehen verloren.
Wenn Objekte serialisiert werden, versucht PHP die Methode __serialize() oder __sleep vor der Serialisierung
aufzurufen. Dies erlaubt einem Objekt z. B. letzte "Aufräumaktionen",
bevor es serialisiert wird. Ebenso wird die Methode __unserialize() oder __wakeup aufgerufen, wenn das Objekt
mittels unserialize() wiederhergestellt wird.
Hinweis:
Den Namen der privaten Eigenschaften eines Objekts wird der Klassenname
vorangestellt; den Namen geschützter Eigenschaften wird ein '*'
vorangestellt. Diese vorangestellten Werte werden von Nullbytes
umschlossen.
Rückgabewerte
Gibt einen String zurück, der eine Byte-Stream-Repräsentation von
value enthält, die beliebig gespeichert werden kann.
Es ist zu beachten, dass dies ein Binärstring ist, der Null-Bytes enthalten
kann, und als solcher gespeichert und behandelt werden muss. Zum Beispiel
sollte die Ausgabe von serialize() grundsätzlich in einem
BLOB- statt einem CHAR- oder TEXT-Feld in einer Datenbank gespeichert werden.
Beispiele
Beispiel #1 serialize()-Beispiel
<?php
// $session_data enthält ein mehrdimensionales Array mit Session-Informationen
// des aktuellen Benutzers. Wir benutzen serialize() um diese Infos am Ende
// der Anfrage in eine Datenbank zu speichern.
$conn = odbc_connect("webdb", "php", "chicken");
$stmt = odbc_prepare($conn,
"UPDATE sessions SET data = ? WHERE id = ?");
$sqldata = array (serialize($session_data), $_SERVER['PHP_AUTH_USER']);
if (!odbc_execute($stmt, $sqldata)) {
$stmt = odbc_prepare($conn,
"INSERT INTO sessions (id, data) VALUES(?, ?)");
if (!odbc_execute($stmt, array_reverse($sqldata))) {
/* Irgendwas ging schief ... */
}
}
?>
Anmerkungen
Hinweis:
Es ist zu beachten, dass viele eingebaute PHP Objekte nicht serialisiert
werden können. Diejenigen mit dieser Eigenschaft implementieren entweder
das Serializable-Interface oder die
magischen __serialize()/__unserialize()- oder __sleep/__wakeup-Methoden. Wenn eine eingebaute
Klasse nicht mindestens eine dieser Voraussetzungen erfüllt, kann sie
nicht verlässlich serialisiert werden.
Es gibt einige historische Ausnahmen dieser Regel, bei denen interne
Objekte serialisiert werden konnten, ohne das Interface zu implementieren
oder die Methoden offenzulegen.
Warnung
Wenn serialize() Objekte serialisiert, ist zwecks
größtmöglicher Kompatibilität der führende Backslash nicht im Namen von
Klassen in Namensräumen enthalten.