3v4l.org

run code in 300+ PHP versions simultaneously
<?php /** * Challenge 1: Modify Test::$secret before it's output. * * Rules:: * 1. No use of Reflection API / runkit extension * 2. No stopping execution before Test::run() * 3. No Exceptions or PHP errors / warnings notices allowed * 4. No redefining $test * * Hints: * 1. Caesar * 2. Magic methods * 3. Requires a new feature of PHP 5.4 * */ class Test { private $secret = 'Nyy lbhe Onfr ner orybat gb hf.'; private $callback; final public function run() { call_user_func($this->callback); return $this->secret . PHP_EOL; } public function __set($k, $v) { $key = $v[($v[$v])]; // $v is some kind of weird data $value = $v(); // and a callback! $this->{$key} = $value; } } $test = new Test; // start editing here class Decrypt implements ArrayAccess { protected $data = [ 'master' => 'zombie', 'zombie' => 'callback' ]; public $secret; function __construct($test) { $this->secret = function() { $this->secret = str_rot13($this->secret); }; $this->secret = $this->secret->bindTo($test, $test); } function __invoke() { return $this->secret; } function __toString() { return 'master'; } /* Implementation of abstract definations */ /** * abstract public boolean offsetExists ( mixed $offset ) */ public function offsetExists($offset) { return isset($this->data[$offset]); } /** * abstract public mixed offsetGet ( mixed $offset ) */ public function offsetGet($offset) { $offset = (string) $offset; return isset($this->data[$offset]) ? $this->data[$offset] : null; } /** * abstract public void offsetSet ( mixed $offset , mixed $value ) */ public function offsetSet($offset, $value) { if (is_null($offset)) { $this->data[] = $value; } else { $this->data[$offset] = $value; } } /** * abstract public void offsetUnset ( mixed $offset ) */ public function offsetUnset($offset) { unset($this->data[$offset]); } } $decrypt = new Decrypt($test); $test->callback = $decrypt; // end editing here echo $test->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.60.0090.00618.68
8.3.50.0110.00422.05
8.3.40.0000.01518.82
8.3.30.0070.00718.98
8.3.20.0080.00018.73
8.3.10.0050.00321.09
8.3.00.0080.00023.64
8.2.180.0140.00417.00
8.2.170.0070.01022.96
8.2.160.0030.01020.35
8.2.150.0030.00524.18
8.2.140.0000.00824.66
8.2.130.0030.00726.16
8.2.120.0070.00021.05
8.2.110.0080.00321.00
8.2.100.0060.00617.97
8.2.90.0050.00318.22
8.2.80.0040.00420.39
8.2.70.0040.00417.63
8.2.60.0060.00317.50
8.2.50.0050.00317.55
8.2.40.0080.00019.77
8.2.30.0040.00419.46
8.2.20.0060.00317.61
8.2.10.0040.00417.85
8.2.00.0040.00417.63
8.1.280.0100.00725.92
8.1.270.0040.00423.99
8.1.260.0100.01026.35
8.1.250.0050.00228.09
8.1.240.0060.00322.14
8.1.230.0030.00920.88
8.1.220.0000.00817.74
8.1.210.0040.00418.90
8.1.200.0000.00817.35
8.1.190.0030.00517.22
8.1.180.0000.00818.10
8.1.170.0000.00917.62
8.1.160.0050.00218.86
8.1.150.0000.00718.61
8.1.140.0000.00717.47
8.1.130.0040.00417.78
8.1.120.0050.00317.53
8.1.110.0040.00417.49
8.1.100.0040.00417.40
8.1.90.0070.00317.48
8.1.80.0050.00317.40
8.1.70.0000.00717.37
8.1.60.0030.00517.59
8.1.50.0040.00417.37
8.1.40.0040.00417.54
8.1.30.0050.00317.64
8.1.20.0000.00817.64
8.1.10.0060.00317.60
8.1.00.0040.00417.48
8.0.300.0030.00620.16
8.0.290.0040.00416.63
8.0.280.0050.00218.39
8.0.270.0000.00717.27
8.0.260.0000.00716.84
8.0.250.0030.00516.99
8.0.240.0040.00416.99
8.0.230.0050.00216.98
8.0.220.0060.00016.94
8.0.210.0070.00016.80
8.0.200.0000.00716.99
8.0.190.0000.00816.86
8.0.180.0050.00316.96
8.0.170.0000.00716.88
8.0.160.0000.00716.86
8.0.150.0030.00316.92
8.0.140.0030.00616.86
8.0.130.0060.00013.27
8.0.120.0000.00816.86
8.0.110.0070.00016.98
8.0.100.0080.00016.74
8.0.90.0040.00416.93
8.0.80.0060.00916.89
8.0.70.0000.00717.02
8.0.60.0040.00416.73
8.0.50.0040.00416.91
8.0.30.0120.00917.09
8.0.20.0110.00817.40
8.0.10.0040.00416.87
8.0.00.0110.00716.83
7.4.330.0000.00516.74
7.4.320.0030.00316.46
7.4.300.0000.00616.64
7.4.290.0030.00316.57
7.4.280.0060.00316.51
7.4.270.0070.00016.50
7.4.260.0030.00313.41
7.4.250.0030.00616.45
7.4.240.0030.00316.45
7.4.230.0030.00316.59
7.4.220.0170.01016.47
7.4.210.0070.00916.58
7.4.200.0030.00316.42
7.4.190.0070.00016.68
7.4.160.0070.01516.75
7.4.150.0180.00417.40
7.4.140.0070.01217.86
7.4.130.0050.01216.58
7.4.120.0110.00616.68
7.4.110.0060.01216.52
7.4.100.0040.02016.60
7.4.90.0110.00816.39
7.4.80.0120.00619.39
7.4.70.0080.00816.55
7.4.60.0130.00316.60
7.4.50.0040.00416.46
7.4.40.0090.00922.77
7.4.30.0140.00316.35
7.4.00.0030.01014.86
7.3.330.0060.00013.38
7.3.320.0030.00313.39
7.3.310.0030.00316.29
7.3.300.0070.00016.34
7.3.290.0100.00616.45
7.3.280.0110.00516.44
7.3.270.0150.00917.40
7.3.260.0140.00818.24
7.3.250.0120.00416.38
7.3.240.0040.01216.34
7.3.230.0140.00716.41
7.3.210.0100.00716.71
7.3.200.0150.00919.39
7.3.190.0060.01616.54
7.3.180.0120.00316.53
7.3.170.0060.01016.48
7.3.160.0130.00316.47
7.3.120.0100.00314.94
7.2.330.0070.01016.73
7.2.320.0090.00916.57
7.2.310.0100.00716.54
7.2.300.0030.01516.66
7.2.290.0070.01016.71
7.2.00.0000.01019.51
7.1.100.0000.01118.25
7.1.70.0000.00817.21
7.1.60.0040.01117.25
7.1.50.0060.00916.93
7.1.00.0030.05322.43
7.0.200.0140.00316.81
7.0.140.0030.07322.21
7.0.100.0130.04019.93
7.0.90.0130.06320.00
7.0.80.0030.04319.84
7.0.70.0030.04019.84
7.0.60.0130.03320.03
7.0.50.0000.06320.19
7.0.40.0070.03320.14
7.0.30.0030.04020.08
7.0.20.0000.04720.17
7.0.10.0030.04020.10
7.0.00.0030.04320.04
5.6.250.0030.04320.78
5.6.240.0030.06320.54
5.6.230.0030.04720.65
5.6.220.0000.04720.58
5.6.210.0030.04020.63
5.6.200.0030.04021.02
5.6.190.0070.03721.12
5.6.180.0000.04021.06
5.6.170.0100.04721.06
5.6.160.0130.04020.95
5.6.150.0030.04021.10
5.6.140.0000.04721.06
5.6.130.0070.04021.03
5.6.120.0030.03721.04
5.6.110.0030.04721.19
5.6.100.0030.04321.14
5.6.90.0030.04321.02
5.6.80.0030.04020.57
5.6.70.0170.02720.57
5.6.60.0030.04020.41
5.6.50.0030.04020.54
5.6.40.0070.03720.43
5.6.30.0000.04320.44
5.6.20.0100.02720.45
5.6.10.0070.07320.50
5.6.00.0100.04720.39
5.5.380.0100.06320.54
5.5.370.0100.04320.36
5.5.360.0100.03320.35
5.5.350.0030.04320.39
5.5.340.0170.02720.80
5.5.330.0030.03720.93
5.5.320.0030.03720.82
5.5.310.0000.04320.78
5.5.300.0000.03720.93
5.5.290.0070.03720.90
5.5.280.0100.03720.85
5.5.270.0100.03320.81
5.5.260.0030.04020.89
5.5.250.0030.04320.48
5.5.240.0000.04320.29
5.5.230.0000.04320.28
5.5.220.0000.04720.17
5.5.210.0070.03720.13
5.5.200.0070.03020.14
5.5.190.0000.04320.25
5.5.180.0070.03020.17
5.5.160.0070.08020.14
5.5.150.0130.06720.30
5.5.140.0070.04720.01
5.5.130.0030.04320.23
5.5.120.0000.08020.13
5.5.110.0200.06720.19
5.5.100.0100.08020.00
5.5.90.0030.05720.06
5.5.80.0100.06319.99
5.5.70.0070.07720.14
5.5.60.0100.07320.17
5.5.50.0130.03720.07
5.5.40.0070.05020.09
5.5.30.0000.04719.93
5.5.20.0070.06320.07
5.5.10.0070.05020.05
5.5.00.0130.07720.11
5.4.450.0070.04719.36
5.4.440.0100.03719.37
5.4.430.0070.03319.27
5.4.420.0070.03019.36
5.4.410.0030.03719.04
5.4.400.0000.04319.05
5.4.390.0000.04319.05
5.4.380.0100.03319.04
5.4.370.0030.03719.18
5.4.360.0100.03319.25
5.4.350.0070.02719.04
5.4.340.0070.03319.16
5.4.320.0030.07719.16
5.4.310.0130.03719.03
5.4.300.0000.06318.87
5.4.290.0100.06719.17
5.4.280.0130.06319.13
5.4.270.0100.07319.04
5.4.260.0200.06718.89
5.4.250.0100.06719.20
5.4.240.0030.08019.17
5.4.230.0030.08019.04
5.4.220.0100.04319.08
5.4.210.0030.08319.04
5.4.200.0070.04319.20
5.4.190.0130.07019.20
5.4.180.0030.05019.17
5.4.170.0070.06718.93
5.4.160.0100.06319.03
5.4.150.0030.04718.83
5.4.140.0130.03316.50
5.4.130.0100.07016.48
5.4.120.0130.06716.49
5.4.110.0000.06316.52
5.4.100.0000.06316.56
5.4.90.0100.05716.57
5.4.80.0070.06716.33
5.4.70.0030.04716.43
5.4.60.0070.07716.48
5.4.50.0070.07316.45
5.4.40.0100.07016.31
5.4.30.0100.06716.40
5.4.20.0030.07316.36
5.4.10.0030.04016.47
5.4.00.0030.04315.85
5.3.290.0030.07714.70
5.3.280.0070.07714.67
5.3.270.0000.06714.54
5.3.260.0000.08014.54
5.3.250.0070.06314.63
5.3.240.0070.07714.67
5.3.230.0070.07714.57
5.3.220.0100.07014.58
5.3.210.0100.05314.55
5.3.200.0030.08314.68
5.3.190.0170.06014.57
5.3.180.0070.07314.61
5.3.170.0130.04714.51
5.3.160.0070.04314.70
5.3.150.0130.06714.52
5.3.140.0100.03714.62
5.3.130.0030.04314.63
5.3.120.0030.04714.62
5.3.110.0100.07014.55
5.3.100.0100.05714.19
5.3.90.0100.06714.05
5.3.80.0030.04014.01
5.3.70.0100.06714.05
5.3.60.0200.06714.12
5.3.50.0030.05313.88
5.3.40.0070.07713.95
5.3.30.0130.05713.84
5.3.20.0070.07013.75
5.3.10.0030.07013.72
5.3.00.0200.05713.73
5.2.170.0070.05711.27
5.2.160.0000.06311.16
5.2.150.0130.03311.24
5.2.140.0100.07011.21
5.2.130.0000.07011.02
5.2.120.0070.02711.11
5.2.110.0000.03711.22
5.2.100.0030.05011.00
5.2.90.0070.05011.16
5.2.80.0070.03311.03
5.2.70.0030.05711.11
5.2.60.0030.04010.99
5.2.50.0000.06710.89
5.2.40.0030.06010.86
5.2.30.0100.04010.86
5.2.20.0070.02710.92
5.2.10.0100.05310.90
5.2.00.0070.05310.78
5.1.60.0070.0409.84
5.1.50.0000.04710.10
5.1.40.0070.03310.06
5.1.30.0070.04710.43
5.1.20.0170.03710.38
5.1.10.0030.0309.93
5.1.00.0130.04310.11
5.0.50.0030.0478.59
5.0.40.0100.0378.46
5.0.30.0070.0578.46
5.0.20.0000.0238.46
5.0.10.0000.0338.46
5.0.00.0100.0508.46
4.4.90.0170.0278.46
4.4.80.0030.0308.46
4.4.70.0030.0138.46
4.4.60.0030.0278.46
4.4.50.0030.0278.46
4.4.40.0030.0508.46
4.4.30.0030.0378.46
4.4.20.0000.0208.46
4.4.10.0030.0338.46
4.4.00.0070.0238.46
4.3.110.0030.0308.46
4.3.100.0030.0238.46
4.3.90.0070.0278.46
4.3.80.0000.0538.46
4.3.70.0030.0238.46
4.3.60.0000.0308.46
4.3.50.0000.0338.46
4.3.40.0070.0408.46
4.3.30.0000.0308.46
4.3.20.0030.0338.46
4.3.10.0000.0378.46
4.3.00.0000.0278.46

preferences:
56.12 ms | 401 KiB | 5 Q