我已经使用 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 模式,所有运行也正常。
我做错了什么?