Guida Php – I metodi magici __sleep() __wakeup e __set_state()

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

Tags: , ,

Lascia un Commento

Connect with Facebook