sto provando a serializzare/deserializzare proprietà statiche di una classe usando i metodi __wakeup() e __sleep() con PHP 5.2.5
secondo quanto ho letto
la funzione __sleep si attiva subito prima della serializzazione
la funzione __wakeup si attiva subito prima della deserializzazione
serialize non funziona però con le proprietà statiche, e sto quindi utilizzando un private array (staticvars) in cui inserisco la var4 (che è static) e il suo valore
questo è il codice che sto usando
Ora il serialize sembra funzioni correttamente: se apro il file "test.txt" dove ho inserito la stringa serializzata vi trovo tutte le proprietà (eccetto la varibile static) e l'array che contiene la copia della proprietà statica var4 (vedi allegato)codice:<? class classe { public $var1; private $var2; protected $var3; public static $var4; private $staticvars = array(); function __construct() { $this->var1 = "valore uno"; $this->var2 = "valore due"; $this->var3 = "valore tre"; classe::$var4 = "valore quattro"; } public function __sleep() { $vars = get_class_vars(get_class($this)); foreach($vars as $key => $val) { if (!empty($val)) { $this->staticvars[$key] = $val; } } return array_keys(get_object_vars($this)); } public function __wakeup() { foreach ($this->staticvars as $key => $val) { $prop = new ReflectionProperty(get_class($this), $key); $prop->setValue(get_class($this), $val); } $this->staticvars = array(); } } ?> Serialize <pre> <?php $cl = new classe(); $s_cl = serialize($cl); file_put_contents("test.txt", $s_cl); echo $s_cl; ?> </pre> Unserialize <?php $sc = file_get_contents("test.txt"); $unscont = unserialize($sc); var_dump($unscont); ?>
Tuttavia quando eseguo l'unserialize l'array staticvars è vuoto: da cosa potrebbe dipendere?
Notate inoltre come nel file di testo appaiano dei simboli speciali (nul) tra un valore e l'altro... è normale?
Grazie a tutti


Rispondi quotando
