我已经看到了一些creative solutions用于处理序列化SPL对象,但是正在寻找更多选项(或细节)。我将嵌套的序列化对象(其中一个是SimpleXML)存储在数据库中,以后再取消序列化。这显然会引起一些问题。

$s = new SimpleXmlElement('<foo>bar</foo>');
$ss = serialize($s);
$su = unserialize($ss);
// Warning: unserialize() [function.unserialize]: Node no longer exists...

是否有人对用于处理序列化SPL对象的高度可靠的方法有任何见识? __sleep()/__ wakeup()是否覆盖?转换为stdClass?转换为字符串,然后序列化?

任何帮助表示赞赏。

[编辑:这些XML模式的范围和变化太大,无法与ORM进行映射。从最根本的角度来说,它们是有状态的进程中的任意有效载荷,这些状态是在 Restful API中触发的。]

最佳答案

尽管存在适当性方面的问题,您仍可以将其转换为XML,如下所示:

$xml = $simpleXmlElem->asXML();

然后,当您从数据库中提取它时:
$simpleXmlElem = simplexml_load_string($xml);

至于仅序列化大量XML是否合适,将XML放入数据库中确实消除了使用关系系统的许多优势,但是您确实具有能够适应任意工作负载的优势。如果某些字段是通用字段,并且/或者您从适当地对其进行规范化中受益(例如,您希望基于这些字段进行选择),请将其移至规范化的列中。

关于php - 如何序列化/反序列化SimpleXML对象?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2970957/

10-12 00:09
查看更多