3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Item { public ?array $children = []; public ?Item $parent = null; public function addChild(Item $item): Item { $item->setParent($this); $this->children[] = $item; return $this; } public function setParent(Item $parent): void { $this->parent = $parent; } public function __sleep() { return array_keys(get_object_vars($this)); } } class Tree { public array $items = []; public function addItem(Item $item): self { $this->items[] = $item; return $this; } public function __clone() { foreach ($this->items as $key => $item) { $clone = clone $item; $this->items[$key] = $clone; } } } class Forest { public Tree $first; public Tree $second; public function __construct(Tree $first, Tree $second) { $this->first = $first; $this->second = $second; } } $charge = new Item(); $baseProduct = new Item(); $base = new Tree(); $base->addItem($baseProduct); $baseProduct->addCHild($charge); $second = clone $base; $data = new Forest($second, $base); assert(is_array($data->second->items[0]->children)); $data = unserialize(serialize($data)); assert(is_array($data->second->items[0]->children)); echo 'OK';

preferences:
31.54 ms | 408 KiB | 5 Q