3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Bar { public function __construct( public Bar $bar, public int $x, public bool $main = false, ) {} public function withMain(): self { $clone = clone $this; $clone->main = true; return $clone; } } class Fiz { public Bar|null $cache = null; public function foo(int $i) { if (!$this->cache) { $this->cache = $this->factor($i); } if ($i <= 1) { return $this ->cache ->withMain(); } return $this->cache; } public function factor(int $i): object { $reflector = new ReflectionClass(Bar::class); return $reflector->newLazyGhost( function (Bar $bar) use ($i) { $bar->__construct($this->foo($i + 1), 2); }, ); } } $fiz = new Fiz(); $f = $fiz->foo(0); var_dump($f->bar->bar->x);

preferences:
31.51 ms | 404 KiB | 5 Q