3v4l.org

run code in 300+ PHP versions simultaneously
<?php class ClosureStatementFactory implements StatementFactory { private $closure; function __construct(callable $closure) { $this->closure = $closure; } function create(\mysqli_stmt $statement, $queryString) { $function = $this->closure; $statementWrapper = $function($statement, $queryString); return $statementWrapper; } } function createTimerProxyXMySQLiStatementFactory(Timer $timer, Logger $logger) { //This is generated by the proxy builder which also generates the TimerProxyXMySQLiStatement class $closure = function ($statement, $queryString) use ($timer, logger) { $object = new TimerProxyXMySQLiStatement( $statement, $queryString, $logger, $timer ); return $object; }; return new ClosureStatementFactory($closure); } //This is how I tell what sort of StatementFactory the code should use. $provider->delegate(StatementFactory::class, 'createTimerProxyXMySQLiStatementFactory'); //And so the appropriate factory gets injected into: class DBConnection { //The database connection class needs to be able to make statement classes function __construct(StatementFactory $statementFactory) { $this->statementFactory = statementFactory; } function prepareQuery($query) { $mysqliStatement = $this->mysqli->prepareStatement($query); return $this->statementFactory->create($mysqliStatement, $queryString); } }

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.280.0110.05012.40
5.4.270.0100.05112.41
5.4.260.0120.04712.40
5.4.250.0100.05412.40
5.4.240.0120.04912.40
5.4.230.0110.04612.40
5.4.220.0070.04512.40
5.4.210.0080.04612.40
5.4.200.0100.04912.40
5.4.190.0080.05112.39
5.4.180.0090.05112.39
5.4.170.0140.07412.40
5.4.160.0140.06612.39
5.4.150.0070.04812.39
5.4.140.0090.06512.08
5.4.130.0180.05412.06
5.4.120.0120.07812.03
5.4.110.0120.06312.02
5.4.100.0150.06212.02
5.4.90.0120.06612.02
5.4.80.0120.06312.02
5.4.70.0070.04912.02
5.4.60.0100.04812.02
5.4.50.0090.04512.02
5.4.40.0130.06112.01
5.4.30.0100.05912.00
5.4.20.0120.05012.00
5.4.10.0090.05412.00
5.4.00.0120.06011.50
5.3.280.0120.04412.71
5.3.270.0100.04012.72
5.3.260.0090.03912.72
5.3.250.0100.04012.72
5.3.240.0080.03812.72
5.3.230.0060.04112.71
5.3.220.0070.03812.68
5.3.210.0110.05012.68
5.3.200.0100.06512.68
5.3.190.0090.07212.68
5.3.180.0110.06112.67
5.3.170.0110.07212.67
5.3.160.0090.05612.67
5.3.150.0120.05212.67
5.3.140.0120.05612.66
5.3.130.0090.05012.66
5.3.120.0160.07112.66
5.3.110.0120.06312.66
5.3.100.0090.05812.13
5.3.90.0150.06412.11
5.3.80.0080.05812.08
5.3.70.0100.05012.09
5.3.60.0070.04712.07
5.3.50.0090.04712.01
5.3.40.0170.07912.01
5.3.30.0170.07111.98
5.3.20.0150.06011.76
5.3.10.0140.06711.72
5.3.00.0160.08011.71

preferences:
139.45 ms | 1394 KiB | 7 Q