在我的任务中编写一种对象序列化(用于XML输出)会非常好。我已经完成了,但不知道如何避免递归链接。
麻烦的是,某些对象必须具有公共(!)属性,并且具有指向其父级的链接(它确实非常简单)。当我尝试序列化一个聚集了一些孩子的父对象时 - 带有父对象链接的孩子会永远地进行递归。
有没有解决方案来处理这样的递归,因为print_r()没有黑客攻击? 我不能使用像“if($ prop ==='parent')”之类的东西,因为有时候不同环境中父母的链接超过1个。
答案 0 :(得分:1)
编写自己的序列化函数,并始终将已处理的项目列表传递给它。由于PHP5(我假设您使用的是php5)始终复制对象的引用,您可以执行以下操作:
public function __sleep() {
return $this->serialize();
}
protected function serialize($processed = array()) {
if (($position = array_search($this, $processed, true)) !== false) {
# This object has already been processed, you can use the
# $position of this object in the $processed array to reference it.
return;
}
$processed[] = $this;
# do your actual serialization here
# ...
}