在PHP中,我試圖用var_export
,但我不能讓它使用擴展分類工作:PHP:使用擴展類的var_export?
class BaseClass {
public $a = 1;
public static function __set_state($array) {
//is it possible to get the classname of the extended class here?
$obj = new BaseClass();
foreach($array as $k => $v) {
$obj->$k = $v;
}
return $obj;
}
}
class ExtendedClass extends BaseClass {
public $b = 2;
}
$object = new ExtendedClass();
var_dump($object);
$serialized_object = var_export($object, true);
eval('$object2 = ' . $serialized_object. ';');
echo "<br/>";
var_dump($object2);
對象2 $然後將BaseClass
類,而不是ExtendedClass
的!
我有幾千個類從基類擴展,所以使每個類的__set_state
方法不是一個真正的選擇。
是否有可能在__set_state
獲得擴展類的類名?
你真的應該使用序列化()和反序列化(),而不是var_export()和eval()。使用這樣的eval是可怕的做法。 – Lepidosteus
我試圖對一個對象數組序列化,但我發現很難在反序列化後得到完全相同的對象數組,所以我試着用var_export來代替... – Dylan
@Dylan:嘗試實現[this interface](http:// php.net/manual/en/class.serializable.php),然後使用序列化/反序列化... –