3v4l.org

run code in 300+ PHP versions simultaneously
<?php class User { public function __construct( private Base $base, ) { } public function run() { $return = $this->base->f(42); var_dump($return); } } readonly class Base { public function __construct( public int $i, ) { } public function f(int $i): string { echo $i; return 'hoge'; } } class ExpectationException extends \Exception {} readonly class Mock extends Base { public function __construct( private ExpectationStorage $storage = new ExpectationStorage, ) { } public function f(...$args): string { if ($args !== $this->storage->getArgs(__FUNCTION__)) { throw new ExpectationException; } if ($this->storage->hasReturns(__FUNCTION__)) { return $this->storage->getReturns(__FUNCTION__); } } public function expects(): ExpectationBuilder { return new ExpectationBuilder($this->storage); } } class ExpectationBuilder { public function __construct( private ExpectationStorage $storage, ) { } public function __call(string $function_name, $args) { $this->storage->setArgs($function_name, $args); return new FunctionExpectationBuilder($function_name, $this->storage); } } class FunctionExpectationBuilder { public function __construct( private string $function_name, private ExpectationStorage $storage, ) { } public function andReturns($value) { $this->storage->setReturns($this->function_name, $value); return $this; } } class ExpectationStorage { private array $args_expectations = []; private array $returns_expectations = []; public function setArgs(string $function_name, $args) { $this->args_expectations[$function_name] = $args; } public function getArgs(string $function_name) { return $this->args_expectations[$function_name]; } public function setReturns(string $function_name, $value) { $this->returns_expectations[$function_name] = $value; } public function getReturns(string $function_name) { return $this->returns_expectations[$function_name]; } public function hasReturns(string $function_name) { return isset($this->returns_expectations[$function_name]); } } $mock = new Mock(); $mock->expects()->f(42)->andReturns('nya-n'); (new User($mock))->run(); $mock = new Mock(); $mock->expects()->f(128)->andReturns('nya-n'); (new User($mock))->run();

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.0060.01320.59
8.2.130.0150.00421.06
8.2.120.0070.01120.88
8.2.110.0100.01020.57
8.2.100.0130.00720.58
8.2.90.0130.00620.68
8.2.80.0100.01020.53
8.2.70.0160.00320.45
8.2.60.0150.00020.63
8.2.50.0030.01020.48
8.2.40.0060.00320.51
8.2.30.0120.00620.63
8.2.20.0080.00020.57
8.2.10.0000.00820.63
8.2.00.0080.00020.71
8.1.260.0000.00823.73
8.1.250.0090.00023.85
8.1.240.0120.00620.05
8.1.230.0030.00620.14
8.1.220.0000.00820.27
8.1.210.0080.00020.27
8.1.200.0080.00020.13
8.1.190.0030.01320.34
8.1.180.0100.01020.08
8.1.170.0000.00820.22
8.1.160.0040.00420.22
8.1.150.0040.00420.22
8.1.140.0130.00620.13
8.1.130.0060.00320.38
8.1.120.0070.01120.18
8.1.110.0040.00420.29
8.1.100.0050.00320.19
8.1.90.0030.00520.16
8.1.80.0030.00620.16
8.1.70.0150.00320.21
8.1.60.0000.01820.41
8.1.50.0080.00020.34
8.1.40.0170.00020.34
8.1.30.0030.00620.38
8.1.20.0030.00620.34
8.1.10.0100.00620.22
8.1.00.0030.00620.06

preferences:
137.83 ms | 1398 KiB | 7 Q