上記の例のように、SplObjectStorage を使用して単純な Composite パターンを実装しました。
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);
また、SplObjectStorage の代わりに array() を使用して Composite パターンを実装すると、すべて正常に実行されます。
私が間違っているのは何ですか?