3v4l.org

run code in 300+ PHP versions simultaneously
<?php interface I {} class A implements I{} $results = []; [$key, $value] = compute('instanceof [object]', function($instance) { $instance instanceof I; }); $results[$key] = $value; [$key, $value] = compute('is_subclass_of [object]', function($instance) { is_subclass_of($instance, I::class); }); $results[$key] = $value; [$key, $value] = compute('is_subclass_of [class]', function($instance) { is_subclass_of(A::class, I::class); }); $results[$key] = $value; [$key, $value] = compute('class_implements [object]', function($instance) { in_array(I::class, class_implements(A::class)); }); $results[$key] = $value; [$key, $value] = compute('is_a [object]', function($instance) { is_a($instance, I::class); }); $results[$key] = $value; [$key, $value] = compute('is_a [class]', function($instance) { is_a(A::class, I::class, true); }); $results[$key] = $value; [$key, $value] = compute('reflection [class]', function($instance) { ( new ReflectionClass(A::class))->implementsInterface(I::class); }); $results[$key] = $value; function compute($name, $callback) { $instance = new A; $start = microtime(true); for($i = 1e5; $i; $i--) { $callback($instance); } $elapsedMs = (microtime(true) - $start)*1000; return [$name, $elapsedMs]; } asort($results); $best = min($results); $results = array_map(function($result) use($best) { return [ $result, $result / $best, ]; }, $results); $performance = 0; foreach($results as $name => $result) { [$elapsedMs, $performance] = $result; $extraTimeInPercent = ($performance - 1) * 100; echo sprintf( '%25s took %6.2f ms | +%3.0f%% | %s', $name, $elapsedMs, $extraTimeInPercent, str_pad('', ($performance * 10), '.') ) . PHP_EOL; }

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.00.0120.07328.09
8.2.130.0100.07528.09
8.1.260.0120.07828.09
8.1.00.0030.11817.52
8.0.300.0210.07928.09
8.0.130.0220.11116.87
8.0.120.0220.10216.82
8.0.110.0170.11016.98
8.0.100.0160.10616.80
8.0.90.0200.10216.96
8.0.80.0170.09916.92
8.0.70.0200.10616.83
8.0.60.0170.09816.85
8.0.50.0130.10416.84
8.0.30.0140.11016.74
8.0.20.0140.11117.05
8.0.10.0130.10517.11
8.0.00.0070.11117.09
7.4.270.0000.11316.55
7.4.260.0220.10816.66
7.4.250.0100.11816.57
7.4.240.0130.10116.50
7.4.230.0130.10516.70
7.4.220.0060.10616.49
7.4.210.0100.11116.61
7.4.200.0090.09716.68
7.4.190.0120.10016.56
7.4.180.0130.10116.75
7.4.160.0100.11016.56
7.4.150.0150.09916.59
7.4.140.0160.09616.59
7.4.130.0110.09816.52
7.4.120.0160.10016.51
7.4.110.0160.09516.52
7.4.100.0100.10316.55
7.4.90.0140.09816.56
7.4.80.0190.09316.43
7.4.70.0190.09416.51
7.4.60.0200.08916.52
7.4.50.0200.09516.43
7.4.40.0100.10516.50
7.4.30.0110.10316.57
7.4.20.0140.09616.48
7.4.10.0130.09816.58
7.4.00.0160.09216.56
7.3.330.0140.10116.32
7.3.320.0130.10216.42
7.3.310.0160.10716.43
7.3.300.0150.11016.37
7.3.290.0160.12016.32
7.3.280.0280.11816.52
7.3.270.0250.11916.46
7.3.260.0230.12216.42
7.3.250.0070.12716.40
7.3.240.0060.13116.37
7.3.230.0130.13116.26
7.3.220.0230.12716.46
7.3.210.0320.10916.38
7.3.200.0220.12516.33
7.3.190.0200.11516.33
7.3.180.0060.12416.20
7.3.170.0200.11216.20
7.3.160.0100.12116.35
7.3.150.0030.10816.20
7.3.140.0030.10616.25
7.3.130.0030.11416.16

preferences:
40.12 ms | 401 KiB | 5 Q