Ошибка сериализации дерева объектов с помощью SplObjectStorage

Я реализовал простой шаблон Composite, используя 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 бросает мне Ошибка сегментации . Это происходит только тогда, когда я добавляю к объекту любое количество узлов любого типа.

Этот код нарушает работу:

$node = new Node;
$composite = new Composite;
$composite->add($node);
echo serialize($composite);

Хотя этот работает:

$node = new Node;
$composite = new Composite;
echo serialize($composite);

Кроме того, если я реализую шаблон Composite с помощью array () SplObjectStorage, все тоже работает нормально.

Что я делаю не так?

5
задан Dave Schweisguth 12 February 2016 в 05:47
поделиться