3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Header { public function __construct() { $this->project = get_prior_object(); $this->modules = get_prior_object(1); } } class Modules { public function __construct() { $this->project = get_prior_object(); $this->header = new Header(); } } class Project { public $config = "config"; public function __construct() { $this->modules = new Modules(); } } $p = new Project(); var_dump($p->modules, $p->modules->header, $p->modules->project); function get_prior_object($skip = 0) { $bt = debug_backtrace(); if (isset($bt[1]['function']) && $bt[1]['function'] === "__construct") { // called from constructor, so skip it! $skip++; } foreach ($bt as $stack) { if (isset($stack['function']) && $stack['function'] === "__construct" && $skip-- <= 0) { return $stack['object']; } } return null; }

preferences:
34.65 ms | 402 KiB | 5 Q