3v4l.org

run code in 300+ PHP versions simultaneously
<?php // The smallest, ugliest autowiring container. function dep_set($n, $v) { $GLOBALS['deps'][$n] = $v; } function dep_get($n) { $v = &$GLOBALS['deps'][$n]; if (!$v) $v = $n; $r = $v instanceof Closure ? new ReflectionFunction($v) : (new ReflectionClass($n))->getConstructor(); $a = []; foreach ($r->getParameters() as $i => $p) { $pc = $p->getClass(); if (!$pc) throw new Exception('Cannot magically resolve a param $' . $p->name . ' without class typehint'); $pn = $pc->name; $a[] = dep_get(isset($GLOBALS['deps'][$n . '@' . $pn]) ? $n . '@' . $pn : $pn); } $v = $v instanceof Closure ? $v(...$a) : new $v(...$a); return $v; } // Usage: class A { function __construct($a, $b) { echo $a + $b; // 3 } function b() { echo 4; } } class B { function __construct(A $a) { $a->b(); } } class C { function __construct(B $a) { } } dep_set(A::class, function () { return new A(1, 2); }); $c = dep_get(C::class); // Instantiates A, B, C and prints "34"
Output for git.master, git.master_jit, rfc.property-hooks
Deprecated: Method ReflectionParameter::getClass() is deprecated in /in/tbe6i on line 14 Deprecated: Method ReflectionParameter::getClass() is deprecated in /in/tbe6i on line 14 34

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
53.95 ms | 401 KiB | 8 Q