3v4l.org

run code in 300+ PHP versions simultaneously
<?php const ERRMODE_EMPTY = 1; const ERRMODE_LITERAL = 2; const ERRMODE_EXCEPTION = 3; function render_template($template, array $variables, $escapeChar = '@', $errMode = ERRMODE_EXCEPTION) { $esc = preg_quote($escapeChar); $expr = "/ $esc$esc(?=$esc*+{) | $esc{ | {(\w+)} /x"; $callback = function($match) use($variables, $escapeChar, $errMode) { switch ($match[0]) { case $escapeChar . $escapeChar: return $escapeChar; case $escapeChar . '{': return '{'; default: if ($errMode === ERRMODE_EMPTY) { return ''; } else if ($errMode === ERRMODE_LITERAL) { return $match[0]; } else if ($errMode === ERRMODE_EXCEPTION) { throw new \Exception('Unknown placeholder: ' . $match[1]); } else { return $errMode; } } }; return preg_replace_callback($expr, $callback, $template); } $template = <<<'TPL' HELLO {name} How are you doing {when} Feeling @{ok}? TPL; $data = [ 'name' => 'WORLD', 'when' => 'yesterday', ] echo render_template($template, $data);

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.340.0060.03712.04
5.4.320.0090.03812.53
5.4.310.0090.05012.53
5.4.300.0070.04112.52
5.4.290.0080.04412.52
5.4.280.0100.03212.42
5.4.270.0070.03712.42
5.4.260.0060.04112.42
5.4.250.0050.03912.42
5.4.240.0090.03412.42
5.4.230.0070.04212.41
5.4.220.0120.03412.41
5.4.210.0080.03612.41
5.4.200.0090.03512.41
5.4.190.0060.03812.41
5.4.180.0040.04112.41
5.4.170.0090.03612.41
5.4.160.0080.03812.41
5.4.150.0060.03712.41
5.4.140.0100.03712.09
5.4.130.0070.03912.07
5.4.120.0080.03812.04
5.4.110.0080.03612.04
5.4.100.0050.03712.04
5.4.90.0060.03912.04
5.4.80.0070.03912.04
5.4.70.0070.03912.03
5.4.60.0060.04212.04
5.4.50.0070.03912.03
5.4.40.0080.03812.03
5.4.30.0080.05312.02
5.4.20.0070.04212.02
5.4.10.0090.04312.02
5.4.00.0120.04811.51
5.3.290.0070.04512.80
5.3.280.0080.04312.71
5.3.270.0060.06912.72
5.3.260.0130.05412.72
5.3.250.0110.03712.72
5.3.240.0040.04212.72
5.3.230.0040.03912.71
5.3.220.0060.03812.68
5.3.210.0070.03812.68
5.3.200.0020.04212.68
5.3.190.0080.03712.67
5.3.180.0110.03212.67
5.3.170.0070.03612.67
5.3.160.0050.03812.68
5.3.150.0070.03812.67
5.3.140.0060.04112.66
5.3.130.0100.04812.66
5.3.120.0050.04112.65
5.3.110.0060.04712.66
5.3.100.0080.03812.14
5.3.90.0060.04012.13
5.3.80.0090.03412.12
5.3.70.0050.04012.11
5.3.60.0050.04212.11
5.3.50.0080.03812.04
5.3.40.0090.03712.04
5.3.30.0070.03612.01
5.3.20.0070.03811.79
5.3.10.0050.03611.75
5.3.00.0070.03511.74
5.2.170.0080.0289.18
5.2.160.0060.0299.18
5.2.150.0090.0349.18
5.2.140.0040.0339.18
5.2.130.0090.0269.14
5.2.120.0100.0279.14
5.2.110.0050.0329.15
5.2.100.0050.0319.14
5.2.90.0060.0309.14
5.2.80.0060.0319.14
5.2.70.0080.0289.14
5.2.60.0050.0359.09
5.2.50.0050.0329.06
5.2.40.0070.0309.04
5.2.30.0040.0319.01
5.2.20.0060.0309.00
5.2.10.0050.0278.92
5.2.00.0030.0318.79
5.1.60.0020.0268.07
5.1.50.0040.0248.07
5.1.40.0090.0208.05
5.1.30.0050.0258.40
5.1.20.0040.0298.42
5.1.10.0040.0278.14
5.1.00.0050.0258.15
5.0.50.0040.0226.62
5.0.40.0050.0196.48
5.0.30.0070.0306.29
5.0.20.0010.0246.27
5.0.10.0010.0246.24
5.0.00.0040.0336.23
4.4.90.0030.0214.78
4.4.80.0020.0164.75
4.4.70.0010.0194.75
4.4.60.0010.0174.75
4.4.50.0030.0174.77
4.4.40.0040.0264.71
4.4.30.0040.0154.75
4.4.20.0030.0174.85
4.4.10.0030.0164.85
4.4.00.0050.0254.76
4.3.110.0030.0164.67
4.3.100.0040.0144.67
4.3.90.0040.0214.63
4.3.80.0020.0304.58
4.3.70.0050.0184.63
4.3.60.0040.0134.63
4.3.50.0030.0164.63
4.3.40.0050.0224.54
4.3.30.0030.0173.28
4.3.20.0020.0183.26
4.3.10.0010.0183.22
4.3.00.0130.0177.12

preferences:
144.8 ms | 941 KiB | 8 Q