3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); spl_autoload_register(function (string $name): void { printf("autoload: %s\n", $name); switch ($name) { case 'C1': class C1 {} break; case 'C2': class C2 {} break; case 'C3': class C3 { public static function method() {} } break; case 'C4': class C4 { public const V = 1; } break; case 'C5': class C5 { public static $v; } break; case 'C6': class C6 {} break; case 'C7': class C7 {} break; case 'I1': interface I1 {} break; case 'I2': interface I2 { public const V = 1; } break; case 'I3': interface I3 {} break; case 'T1': trait T1 {} break; case 'T2': trait T2 {} break; case 'E1': enum E1: int { case V = 10; } break; case 'A1': #[Attribute] class A1 {} break; } }); final class Foo extends C1 implements I1 { use T1; } new C2; C3::method(); C4::V; C5::$v; I2::V; E1::V; // T9::V; トレイト名による定数参照でオートロードは動作するが、その後 Cannot access trait constant エラーになる new ReflectionClass(C6::class); (new ReflectionClass(Foo::class))->getAttributes('A1', ReflectionAttribute::IS_INSTANCEOF); spl_autoload_call(C7::class); unserialize('O:2:"C8":0:{}'); // クラス定義が無くてもエラーにはならない /* object(__PHP_Incomplete_Class)#2 (1) { ["__PHP_Incomplete_Class_Name"]=> string(2) "C6" } */

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)
8.3.80.0380.01030.84
8.3.70.0310.01830.84
8.3.60.0490.00030.84
8.3.50.0100.01030.84
8.3.40.0330.01130.84
8.3.30.0400.00330.84
8.3.20.0390.00430.84
8.3.10.0370.00330.84
8.3.00.0330.01030.84
8.2.200.0320.00730.84
8.2.190.0270.01330.84
8.2.180.0370.00330.84
8.2.170.0390.00630.84
8.2.160.0430.00630.84
8.2.150.0350.01430.84
8.2.140.0330.00330.84
8.2.130.0340.01030.84
8.2.120.0350.00930.84
8.2.110.0400.00330.84
8.2.100.0300.00730.84
8.2.90.0170.02430.84
8.2.80.0380.00330.84
8.2.70.0300.01230.84
8.2.60.0340.01330.84
8.2.50.0380.01030.84
8.2.40.0310.01230.84
8.2.30.0310.00930.84
8.2.20.0390.00030.84
8.2.10.0280.01130.84
8.2.00.0400.00030.84
8.1.290.0290.01130.84
8.1.280.0360.00430.84
8.1.270.0370.00530.84
8.1.260.0320.00630.84
8.1.250.0220.01930.84
8.1.240.0330.00630.84
8.1.230.0270.00830.84
8.1.220.0230.00830.84
8.1.210.0260.00430.84
8.1.200.0230.01030.84
8.1.190.0270.01130.84
8.1.180.0300.01130.84
8.1.170.0300.00830.84
8.1.160.0350.00330.84
8.1.150.0340.00430.84
8.1.140.0340.00330.84
8.1.130.0200.01430.84
8.1.120.0230.01130.84
8.1.110.0340.00330.84
8.1.100.0250.01330.84
8.1.90.0340.00330.84
8.1.80.0280.01030.84
8.1.70.0320.00830.84
8.1.60.0380.00530.84
8.1.50.0400.00330.84
8.1.40.0350.01030.84
8.1.30.0220.01530.84
8.1.20.0210.00930.84
8.1.10.0190.00030.84
8.1.00.0240.00030.84

preferences:
133.49 ms | 1405 KiB | 7 Q