php - 为什么无法序列化 PHP 内置对象?

标签 php object serialization

我试图反序列化一个 PHP 对象。

警告:unserialize() [function.unserialize]: Node no longer exists in/var/www/app.php on line 42

但是为什么会发生这种情况?

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

我使用这个函数来序列化 simplexml 对象

function serializeSimpleXML(SimpleXMLElement $xmlObj) 
{

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

}

要反序列化一个 simplexml objetc,我使用这个函数

function unserializeSimpleXML($str) 
{

        return simplexml_load_string(unserialize($str));

}

最佳答案

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

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

请注意,这本质上与“内置”PHP 类/对象无关,而是 SimpleXML 的实现细节(我认为是 PHP 5 中的 DOM)。

关于php - 为什么无法序列化 PHP 内置对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1992906/

相关文章:

java - 序列化对象会包含元数据吗?

php - 关联 PHP 数组(包含对象)的非破坏性 JSON 编码/解码

php - 单引号和双引号内的变量

php - 在 PHP 中 while/foreach 内包装 3 个或更少的对象

javascript - 尝试将动画重构为类对象,如何构造其相互关联的部分

javascript - 使用异常键发送 JSON

java - db4o Java 8 兼容吗?

php - 基于断点的 Bootstrap 行元素

php - 使用 Alamofire 将数据保存在 iOS user_id 中

java - 在Java中,如何使用我自己的比较标准对未实现Comparable的对象进行排序?