2013-07-04 67 views
1

在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獲得擴展類的類名?

+2

你真的應該使用序列化()和反序列化(),而不是var_export()和eval()。使用這樣的eval是可怕的做法。 – Lepidosteus

+0

我試圖對一個對象數組序列化,但我發現很難在反序列化後得到完全相同的對象數組,所以我試着用var_export來代替... – Dylan

+0

@Dylan:嘗試實現[this interface](http:// php.net/manual/en/class.serializable.php),然後使用序列化/反序列化... –

回答

1

實例化稱爲類:的

$obj = new static(); 

代替

$obj = new BaseClass(); 
+0

是的,它的工作原理!從來沒有聽說過,你有這方面的一些文件? – Dylan

+0

http://php.net/manual/en/language.oop5.late-static-bindings.php –