【发布时间】:2011-04-04 18:18:30
【问题描述】:
我已经使用 SplObjectStorage 实现了一个简单的复合模式,就像上面的例子:
class Node
{
private $parent = null;
public function setParent(Composite $parent)
{
$this->parent = $parent;
}
}
class Composite extends Node
{
private $children;
public function __construct()
{
$this->children = new SplObjectStorage;
}
public function add(Node $node)
{
$this->children->attach($node);
$node->setParent($this);
}
}
每当我尝试序列化 Composite 对象时,PHP 5.3.2 都会给我一个 Segmentation Fault。
只有当我向对象添加任意数量的任意类型的节点时才会发生这种情况。
这是有问题的代码:
$node = new Node;
$composite = new Composite;
$composite->add($node);
echo serialize($composite);
虽然这个可行:
$node = new Node;
$composite = new Composite;
echo serialize($composite);
另外,如果我使用 array() 而不是 SplObjectStorage 来实现 Composite 模式,也可以正常运行。
我做错了什么?
【问题讨论】:
标签: php serialization segmentation-fault composite spl