3v4l.org

run code in 300+ PHP versions simultaneously
<?php // Calling it supervisor because it maintains an internal state, // Receiver because it receives messages. $supervisor = makeReceiver(); // ...(243) The internal id, optional // Now we're messaging into that state. Here, we're passing commands. $supervisor->send(['addUser','amy']); $supervisor->send(['addUser','bob']); $supervisor->send(['addUser','ellen']); $supervisor->send(['addUser','joe']); $supervisor->send(['addUser','mark']); $supervisor->send(['addUser','janice']); // Nope $supervisor->send(['addUser','franke']); // Sorry, too many // This is a pointer to what's been yielded in the generator. // It is now an Iterator (next, rewind). $users = $supervisor->send(_m('iterator')); function _m($message) { return [$message, null]; } foreach($users as $user) { echo "User is `$user`.".PHP_EOL; } // This tells it to hari-kari. var_dump($supervisor->send(['SIGHUP', $supervisor])); $supervisor2 = makeReceiver(null, ['eduardo','paul','simon',]); $supervisor2->send(['addUser','ellen']); $supervisor2->send(['addUser','joe']); $users2 = $supervisor2->send(_m('iterator')); foreach($users2 as $user2) { echo "User2 is `$user2`.".PHP_EOL; } // Walk the plank, aargh! matey! var_dump($supervisor2->send(['SIGHUP', $supervisor])); function makeReceiver(?int $id = null, ?array $names = null) { $names = $names ?? []; $cNames = 0; $maxUsers = 5; $running = true; $id = $id ?? random_int(1, 500000); $log = function($signal, $message, ?string $tmpl = null) use($id) { $tmpl = $tmpl ?? 'Receiver(%d): [%s](%s)'; echo sprintf($tmpl, $id, $signal, \json_encode($message)).PHP_EOL; }; while ($running) { list($signal, $message) = yield; $log($signal, $message); switch($signal) { case 'SIGHUP': // Hang up! $running = false; return null; case 'SIGCYC': // Recycle, reset $names = []; $cNames = 0; break; case 'addUser': if ($maxUsers > $cNames) { $names[] = $message; $cNames++; } break; case 'iterator': $maxUsers = 0; yield array_values(array_unique(array_values($names))); } } }

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)
7.2.30.0140.01717.98
7.2.20.0190.01717.98
7.2.10.0140.01418.19
7.2.00.0120.01217.98
7.1.150.0100.01317.00
7.1.140.0120.01517.13
7.1.130.0140.01516.87
7.1.120.0160.01216.86
7.1.110.0130.01316.66
7.1.100.0140.01416.00
7.1.90.0140.01316.43
7.1.80.0120.01116.23
7.1.70.0460.01115.46
7.1.60.0340.02033.00
7.1.50.0420.01532.97
7.1.40.0270.01632.58
7.1.30.0320.01632.63
7.1.20.0350.01832.93
7.1.10.0920.01314.91
7.1.00.0080.01514.93

preferences:
21.93 ms | 401 KiB | 5 Q