3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Fu { final class Exception extends \Exception { } final class Token { public $tokenType; public $content; public $contentLength; final public function __construct($tokenType, $content, $contentLength) { $this->tokenType = $tokenType; $this->content = $content; $this->contentLength = $contentLength; } } final class Parser { const FU_TOKENTYPE_WHITESPACE = 0x00000001; const FU_TOKENTYPE_DATATYPE_CHAR = 0x00000002; const FU_TOKENTYPE_VARIABLE = 0x00000003; const FU_TOKENTYPE_SEMICOLON = 0x00000004; const FU_TOKENTYPE_ASSIGN = 0x00000005; const FU_TOKENTYPE_LITERAL_INTEGER = 0x00000006; const FU_TOKENTYPE_OPERATOR_ADD = 0x00000007; const FU_SCOPE_ROOT = 0x00000001; const FU_SCOPE_DECLARATION_VARIABLE = 0x00000002; const FU_SCOPE_ final public static function parse($source) { $tokens = []; while ($source !== '') { $token = NULL; switch (substr($source, 0, 1)) { case ' ': case "\t": case "\n": $i = 1; while ($source{$i} === ' ' || $source{$i} === "\t" || $source{$i} === "\n") { ++$i; } $tokens[] = new Token(self::FU_TOKENTYPE_WHITESPACE, substr($source, 0, $i), $i); $source = substr($source, $i); break; case 'c': if (substr($source, 0, 4) === 'char') { $tokens[] = new Token(self::FU_TOKENTYPE_DATATYPE_CHAR, 'char', 4); $source = substr($source, 4); } else { throw new Exception('Parse error at line x, position x; unidentified symbol'); } break; case '$': $i = 1; while (in_array($source{$i}, ['_', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'])) { ++$i; } $tokens[] = new Token(self::FU_TOKENTYPE_VARIABLE, substr($source, 0, $i), $i); $source = substr($source, $i); break; case ';': $tokens[] = new Token(self::FU_TOKENTYPE_SEMICOLON, ';', 1); $source = substr($source, 1); break; case '=': $tokens[] = new Token(self::FU_TOKENTYPE_ASSIGN, '=', 1); $source = substr($source, 1); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': $i = 1; while (in_array($source{$i}, ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'])) { ++$i; } // TODO: float parsing $tokens[] = new Token(self::FU_TOKENTYPE_LITERAL_INTEGER, substr($source, 0, $i), $i); $source = substr($source, $i); break; case '+': $tokens[] = new Token(self::FU_TOKENTYPE_ADD, '+', 1); $source = substr($source, 1); break; } } return $tokens; } } } namespace { var_dump(Fu\Parser::parse('char $x;$x=1+2;')); }

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.290.0160.04612.52
5.4.280.0130.04712.42
5.4.270.0140.04912.42
5.4.260.0140.04812.42
5.4.250.0120.05212.42
5.4.240.0110.05112.42
5.4.230.0070.05712.41
5.4.220.0130.04112.41
5.4.210.0060.03812.41
5.4.200.0150.05412.41
5.4.190.0170.05412.41
5.4.180.0160.05012.41
5.4.170.0080.04912.41
5.4.160.0120.04812.41
5.4.150.0110.04712.41
5.4.140.0060.05512.10
5.4.130.0100.04812.08
5.4.120.0070.05012.04
5.4.110.0070.05112.04
5.4.100.0100.04412.04
5.4.90.0060.04712.04
5.4.80.0100.04612.04
5.4.70.0100.04712.04
5.4.60.0120.04612.03
5.4.50.0070.05212.03
5.4.40.0060.05112.02
5.4.30.0140.07112.02
5.4.20.0150.06012.02
5.4.10.0150.10412.02
5.4.00.0100.05011.52
5.3.280.0120.06512.71
5.3.270.0150.06812.72
5.3.260.0230.07012.72
5.3.250.0090.05512.72
5.3.240.0110.05312.72
5.3.230.0100.05112.71
5.3.220.0050.05912.68
5.3.210.0100.05512.68
5.3.200.0080.05412.68
5.3.190.0060.05612.68
5.3.180.0080.05412.68
5.3.170.0050.05712.67
5.3.160.0110.05112.67
5.3.150.0060.05612.67
5.3.140.0060.05612.66
5.3.130.0080.05712.66
5.3.120.0060.06112.66
5.3.110.0080.06012.66
5.3.100.0140.05612.14
5.3.90.0070.05812.13
5.3.80.0100.05212.11
5.3.70.0100.05212.11
5.3.60.0120.05012.10
5.3.50.0100.05212.04
5.3.40.0140.05212.04
5.3.30.0120.05212.00
5.3.20.0100.05111.79
5.3.10.0160.06011.75
5.3.00.0060.05811.74

preferences:
137.6 ms | 1394 KiB | 7 Q