(PHP 4, PHP 5, PHP 7)
serialize — Generează o reprezentare ce poate fi stocată a unei valori
Generează o reprezentare ce poate fi stocată a unei valori.
Aceasta este utilă pentru păstrarea sau interpretarea valorilor PHP fără a pierde tipul sau structura lor.
Pentru a transforma invers un string serializat într-o valoare PHP, utilizați unserialize().
value
Valoarea ce trebuie serializată. serialize() prelucrează toate tipurile, cu excepția resource. Puteți chiar aplica serialize() asupra tablourilor ce conțin referințe la sine însele. Referințele circulare din interiorul tabloului/obiectului pe care îl serializați de asemenea vor fi stocate. Orice altă referință va fi pierdută.
La serializarea obiectelor, PHP va încerca să apeleze funcția-membru __sleep() înainte de serializare. Aceasta se efectuează pentru a-i permite obiectului să efectueze orice curățiri, etc. înainte de a fi serializat. La fel, când obiectul este restabilit cu ajutorul unserialize() funcția-membru __wakeup() este apelată.
Notă:
Membrii privați ai obiectului au denumirea clasei prefixată la denumirea membrului; membrii privați au un '*' prefixat la denumirea membrului. Aceste valori prefixate au câte un octet nul din ambele părți.
Întoarce un string conținând reprezentarea value
sub
formă de byte-stream care poate fi stocată oriunde.
Atrageți atenția că acesta este un șir de caractere binar, ce poate include octeți null, de aceea trebuie stocat și manipulat ca atare. De exemplu, rezultatele funcției serialize() la general ar trebui stocate într-un câmp BLOB într-o bază de date, și nu într-un câmp CHAR sau TEXT.
Example #1 Exemplu serialize()
<?php
// $session_data conține un tablou multi-dimensional cu informație despre
// sesiune pentru utilizatorul curent. Vom utiliza serialize() pentru a
// stoca această informație într-o bază de date după încheierea interpelării.
$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, $sqldata)) {
/* Ceva nu este în regulă.. */
}
}
?>
Notă:
Atrageți atenția că multe obiecte PHP încorporate nu pot fi serializate. Însă cele ce permit acest lucru implementează interfața Serializable sau metodele magice __sleep() și __wakeup(). Dacă o clasă internă nu îndeplinește cel puțin una dintre aceste cerințe, ea nu poate fi serializată cu siguranță.
Există unele excepții istorice de la această regulă, când unele obiecte interne pot fi serializate fără a implementa interfața sau a expune metodele. Cel mai elocvent exemplu este ArrayObject în versiunile anterioare PHP 5.2.0.
Când serialize() serializează obiecte, primul backslash din denumirea clasei, în cazul claselor cu spații de nume, este exclus pentru a maximiza compatibilitatea.