为什么不可能序列化PHP内置对象?

str*_*ade 5 php serialization object

我试图反序列化PHP对象.

警告:unserialize()[function.unserialize]:第42行的/var/www/app.php中不再存在节点

为什么会这样呢?

即使我找到了一个解决unserialize simplexml对象的解决方案,很高兴知道为什么php无法反序列化对象?

要序列化simplexml对象,我使用此函数

function serializeSimpleXML(SimpleXMLElement $xmlObj) 
{

        return serialize($xmlObj->asXML());

}
Run Code Online (Sandbox Code Playgroud)

要反序列化simplexml对象,我使用此函数

function unserializeSimpleXML($str) 
{

        return simplexml_load_string(unserialize($str));

}
Run Code Online (Sandbox Code Playgroud)

Mik*_*ike 12

SimpleXMLElement包装libxml资源类型.资源无法序列化.在下一次调用时,表示libxml Node对象的资源不存在,因此反序列化失败.可能是一个允许您完全序列化SimpleXMLElement的错误.

您的解决方案是正确的,因为text/xml是任何XML的正确序列化格式.但是,由于它只是一个字符串,因此没有任何理由将XML字符串本身序列化.

请注意,这与"内置"PHP类/对象没有任何关系,但它是SimpleXML的实现细节(我认为PHP 5中的DOM).