3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Foo\Bar { class One { // compile time constants const A = self::class; const B = Two::class; } class Two extends One { public static function run() { var_dump(self::class); // self compile time lookup var_dump(static::class); // runtime lookup var_dump(parent::class); // runtime lookup var_dump(Baz::class); // default compile time lookup } } class Three extends Two { // compile time static lookups public static function checkCompileTime( $one = self::class, $two = Baz::class, $three = One::A, $four = self::B ) { var_dump($one, $two, $three, $four); } } echo "In NS\n"; var_dump(Moo::CLASS); // resolve in namespace } namespace { use Bee\Bop as Moo, Foo\Bar\One; echo "Top\n"; var_dump(One::class); // resolve from use var_dump(Boo::class); // resolve in global namespace var_dump(Moo::CLASS); // resolve from use as var_dump(\Moo::Class); // resolve fully qualified $class = One::class; // assign class as scalar to var $x = new $class; // create new class from original scalar assignment var_dump($x); Foo\Bar\Two::run(); // resolve runtime lookups echo "Parent\n"; Foo\Bar\Three::run(); // resolve runtime lookups with inheritance echo "Compile Check\n"; Foo\Bar\Three::checkCompileTime(); } ?> --EXPECTF-- In NS string(11) "Foo\Bar\Moo" Top string(11) "Foo\Bar\One" string(3) "Boo" string(7) "Bee\Bop" string(3) "Moo" object(Foo\Bar\One)#1 (0) { } string(11) "Foo\Bar\Two" string(11) "Foo\Bar\Two" string(11) "Foo\Bar\One" string(11) "Foo\Bar\Baz" Parent string(11) "Foo\Bar\Two" string(13) "Foo\Bar\Three" string(11) "Foo\Bar\One" string(11) "Foo\Bar\Baz" Compile Check string(13) "Foo\Bar\Three" string(11) "Foo\Bar\Baz" string(11) "Foo\Bar\One" string(11) "Foo\Bar\Two"

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
5.4.90.0030.05016.30
5.4.80.0000.05016.65
5.4.70.0130.07016.32
5.4.60.0100.07016.36
5.4.50.0170.05716.46
5.4.40.0100.05716.49
5.4.30.0030.04316.36
5.4.20.0070.06716.37
5.4.10.0070.03316.40
5.4.00.0070.04715.86
5.3.190.0030.04714.57
5.3.180.0070.07314.72
5.3.170.0070.07314.61
5.3.160.0070.07714.58
5.3.150.0070.07714.59
5.3.140.0030.05314.55
5.3.130.0070.03714.60
5.3.120.0100.07014.69
5.3.110.0100.07714.60
5.3.100.0030.05313.92
5.3.90.0070.04014.04
5.3.80.0000.04714.16
5.3.70.0100.05014.07
5.3.60.0030.06314.02
5.3.50.0030.05013.99
5.3.40.0030.05014.00
5.3.30.0070.07013.79
5.3.20.0030.06313.71
5.3.10.0130.04313.71
5.3.00.0070.03713.79

preferences:
139.76 ms | 1386 KiB | 7 Q