I primi due metodi magici che illustrerò in questo capitolo sono __sleep() e __wakeup(), che hanno in comune la Serializzazione degli Oggetti descritta in questa guida prima della serie sui metodi magici.
PHP richiamerà il metodo __sleep() subito prima di una serializzazione di una istanza della nostra classe.
__wakeup() invece sarà chiamato subito dopo una deserializzazione dell’oggetto, rendendolo utile ad esempio per ristabilire una connessione al database chiusa prima della serializzazione.
Altra differenza importante fra i due metodi è che __sleep() deve ritornare un’array contenente la lista degli attributi da serializzare, e questo ci consente di avere un controllo maggiore sulle serializzazioni della nostra classe.
Se omettete il valore di ritorno di __sleep() la serializzazione fallirà restituendo un valore NULL.
Vediamo un esempio teorico :
<?php
class Oggetto
{
public $attributo = "stringa";
public function __sleep()
{
echo "L'oggetto sta per essere serializzato!<br>";
return array("attributo");
}
public function __wakeup()
{
echo "L'oggetto è appena stato deserializzato!<br>";
}
}
$obj = new Oggetto();
$s = serialize($obj);
echo "Oggetto serializzato = $s<br>";
$u = unserialize($s);
echo $u->attributo;
?>
Il codice produce il seguente risultato :
L’oggetto sta per essere serializzato!
Oggetto serializzato = O:7:”Oggetto”:1:{s:9:”attributo”;s:7:”stringa”;}
L’oggetto è appena stato deserializzato!
stringa
Overload di __set_state()
__set_state() è un metodo statico che viene richiamato per l’esportazione delle classi tramite var_export().
L’unico parametro di questo metodo è un array contenente le proprietà esportate nella forma array (“proprietà” => valore, …)
Il metodo è disponibile da PHP 5.1.0
E con questo capitolo abbiamo definitivamente concluso la serie sui metodi magici.
Versione originale dell’articolo
Lezione Precedente -> Guida Php – La funzione magica __autoload()
Lezione Successiva -> Guida Php – Overload dell’operatore di accesso degli Array
