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
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);
?>
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)
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