Here it is:
<?
function obj2array ( &$Instance ) { $clone = (array) $Instance; $rtn = $clone;
while ( list ($key, $value) = each ($clone) ) { $aux = explode ("\0", $key); $newkey = $aux[count($aux)-1];
if ( $newkey != $key ) { $rtn[$newkey] = &$rtn[$key]; $rtn['___FAKE_KEYS_'][] = $newkey; } }
return $rtn; }
function bless ( &$Instance, $Class ) { if ( ! (is_array ($Instance) ) ) { return NULL; }
// First drop faked keys if available foreach ( $Instance['___FAKE_KEYS_'] as $fake_key ) { unset ($Instance[$fake_key]); } unset ( $Instance['___FAKE_KEYS_'] );
// Get serialization data from array $serdata = serialize ( $Instance );
/* For an array serialized data seems to meant: array_tag:array_count:{array_elems}
array_tag is always 'a' array_count is the number of elements in the array array_elems are the elemens in the array
For an object seems to meant:
object_tag:object_class_name_len:"object_class_name":object_count:{object_members}
object_tag is always 'O'
object_class_name_len is the length in chars of object_class_name string
object_class_name is a string with the name of the class
object_count is the number of object members
object_members is the object_members itself (exactly equal to array_elems)
*/
list ($array_params, $array_elems) = explode ('{', $serdata, 2);
list ($array_tag, $array_count) = explode (':', $array_params, 3 );
$serdata = "O:".strlen ($Class).":\"$Class\":$array_count:{".$array_elems;
$Instance = unserialize ( $serdata ); return $Instance; }
class TestClass { private $One=1; protected $Two=2; public $Three=3;
public function sum() { return $this->One+$this->Two+$this->Three; } }
$Obj = new TestClass (); //$Clone = (array) $Obj;
$Clone = obj2array ( $Obj );
echo "As the original object:<br>"; print_r ($Obj);
echo "<br><br>As an array:<br>"; print_r ($Clone);
$Clone["One"]=7; $Clone["Two"]=7; $Clone["Three"]=7;
bless ( $Clone, TestClass );
echo "<br><br>After blessing as a TestClass instance:<br>"; print_r ($Clone);
echo "<br><br>Calling sum method: "; echo $Clone->sum();
echo "<br>The array was blessed! miracle!!! ;-)<br>";
?>
Hope someone appart from me find it useful. :-)
-- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php