3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace east\movie\library\finder; use east, east\movie, east\movie\library ; final class selector { private $library, $directorCriteria, $movieDirector, $titleCriteria, $movieTitle ; function __construct() { $this->library = new movie\library; } function libraryIs(movie\library $library) { $selector = clone $this; $selector->library = $library; return $selector; } function directorShouldBe(movie\director $director) { $selector = $this->libraryIs(new movie\library); $selector->directorCriteria = $director; return $selector; } function titleShouldBe(movie\title $title) { $selector = $this->libraryIs(new movie\library); $selector->titleCriteria = $title; return $selector; } function movieIs(movie $movie) { $selector = clone $this; $selector->movieDirector = null; $selector->movieTitle = null; $movie->selectorIs($selector); switch (true) { case $selector->directorCriteria && $selector->titleCriteria && $selector->movieDirector == $selector->directorCriteria && $selector->movieTitle == $selector->titleCriteria: case $selector->directorCriteria && ! $selector->titleCriteria && $selector->movieDirector == $selector->directorCriteria: case $selector->titleCriteria && ! $selector->directorCriteria && $selector->movieTitle == $selector->titleCriteria: $this->library->newMovie($movie); } return $this; } function movieDirectorIs(movie\director $director) { $this->movieDirector = $director; return $this; } function movieTitleIs(movie\title $title) { $this->movieTitle = $title; return $this; } function listerIs(movie\lister $lister) { $this->library->listerIs($lister); return $this; } } namespace east\movie\library; use east\movie ; final class finder { private $selector ; function __construct(finder\selector $selector = null) { $this->selector = $selector ?: new finder\selector; } function directorShouldBe(movie\director $director) { $finder = clone $this; $finder->selector = $this->selector->directorShouldBe($director); return $finder; } function titleShouldBe(movie\title $title) { $finder = clone $this; $finder->selector = $this->selector->titleShouldBe($title); return $finder; } function movieIs(movie $movie) { $this->selector->movieIs($movie); return $this; } function libraryIs(movie\library $library) { $finder = clone $this; $finder->selector = $this->selector->libraryIs(new movie\library); $library->finderIs($finder); return $finder; } function listerIs(movie\lister $lister) { $this->selector->listerIs($lister); return $this; } } namespace east\movie; use east ; final class library { private $movies ; function __construct() { $this->movies = []; } function newMovie(east\movie $movie) { $this->movies[] = $movie; return $this; } function finderIs(library\finder $finder) { foreach ($this->movies as $movie) { $finder->movieIs($movie); } return $this; } function listerIs(lister $lister) { foreach ($this->movies as $movie) { $movie->listerIs($lister); } return $this; } } final class director { private $value ; function __construct($value) { if (! is_string($value)) { throw new \domainException('Movie Director should be a string'); } $this->value = $value; } function __toString() { return $this->value; } } final class title { private $value ; function __construct($value) { if (! is_string($value)) { throw new \domainException('Movie title should be a string'); } $this->value = $value; } function __toString() { return $this->value; } } final class lister { function newMovie() { echo '-------------------------' . PHP_EOL; return $this; } function noMoreDataAboutMovie() { return $this; } function movieDirectorIs(director $director) { echo 'Director: ' . $director . PHP_EOL; return $this; } function movieTitleIs(title $title) { echo 'Title: ' . $title . PHP_EOL; return $this; } } namespace east; use east\movie ; class movie { private $director, $title ; function __construct(movie\director $director, movie\title $title) { $this->director = $director; $this->title = $title; } function selectorIs(movie\library\finder\selector $selector) { $selector ->movieDirectorIs($this->director) ->movieTitleIs($this->title) ; return $this; } function listerIs(movie\lister $lister) { $lister ->newMovie() ->movieTitleIs($this->title) ->movieDirectorIs($this->director) ->noMoreDataAboutMovie() ; return $this; } } var_dump(serialize((new movie\library\finder) ->directorShouldBe(new movie\Director('Ridley Scott')) ->libraryIs((new movie\library) ->newMovie(new movie(new movie\director('Ridley Scott'), new movie\title('Alien'))) ->newMovie(new movie(new movie\director('Christopher Nolan'), new movie\title('Interstellar'))) ->newMovie(new movie(new movie\director('Ridley Scott'), new movie\title('Gladiator'))) ) ->listerIs(new movie\lister))) ;

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.70.0100.01318.38
8.3.60.0150.00018.43
8.3.50.0130.00721.99
8.3.40.0110.00418.72
8.3.30.0070.00719.21
8.3.20.0050.00320.34
8.3.10.0040.00421.91
8.3.00.0050.00318.99
8.2.180.0070.01116.88
8.2.170.0120.00422.96
8.2.160.0100.00322.05
8.2.150.0100.00024.18
8.2.140.0060.00324.66
8.2.130.0070.00026.16
8.2.120.0040.00719.34
8.2.110.0060.00322.26
8.2.100.0070.00719.45
8.2.90.0050.00319.35
8.2.80.0040.00417.97
8.2.70.0000.00817.75
8.2.60.0040.00418.18
8.2.50.0090.00018.07
8.2.40.0070.00418.41
8.2.30.0050.00318.14
8.2.20.0040.00417.80
8.2.10.0040.00418.21
8.2.00.0040.00417.83
8.1.280.0050.01025.92
8.1.270.0090.00019.07
8.1.260.0000.00826.35
8.1.250.0030.01328.09
8.1.240.0110.00723.66
8.1.230.0070.00419.17
8.1.220.0000.00817.74
8.1.210.0060.00318.77
8.1.200.0030.00717.48
8.1.190.0040.00417.35
8.1.180.0050.00518.10
8.1.170.0110.00018.65
8.1.160.0040.00422.10
8.1.150.0080.00018.93
8.1.140.0040.00417.54
8.1.130.0040.00417.91
8.1.120.0000.00717.45
8.1.110.0090.00017.46
8.1.100.0040.00417.46
8.1.90.0040.00417.57
8.1.80.0040.00417.41
8.1.70.0030.00517.55
8.1.60.0040.00417.68
8.1.50.0040.00717.61
8.1.40.0030.00517.50
8.1.30.0050.00317.65
8.1.20.0040.00417.74
8.1.10.0030.00617.73
8.1.00.0000.00817.56
8.0.300.0060.00318.77
8.0.290.0070.00016.75
8.0.280.0070.00018.54
8.0.270.0050.00317.22
8.0.260.0030.00317.35
8.0.250.0030.00317.17
8.0.240.0000.00817.15
8.0.230.0000.00717.05
8.0.220.0000.00716.91
8.0.210.0000.00717.07
8.0.200.0030.00317.09
8.0.190.0030.00517.09
8.0.180.0040.00416.99
8.0.170.0000.00717.07
8.0.160.0040.00417.01
8.0.150.0040.00417.03
8.0.140.0040.00416.88
8.0.130.0030.00313.50
8.0.120.0030.00616.90
8.0.110.0050.00317.01
8.0.100.0000.00716.93
8.0.90.0040.00416.96
8.0.80.0030.01317.02
8.0.70.0070.00016.84
8.0.60.0040.00416.87
8.0.50.0040.00417.03
8.0.30.0120.01217.09
8.0.20.0110.01017.44
8.0.10.0030.00617.13
8.0.00.0090.00816.97
7.4.330.0030.00315.03
7.4.320.0000.00716.68
7.4.300.0040.00416.48
7.4.290.0000.00716.69
7.4.280.0000.00816.65
7.4.270.0030.00316.73
7.4.260.0000.00716.68
7.4.250.0040.00416.65
7.4.240.0030.00416.70
7.4.230.0000.00816.77
7.4.220.0090.00916.65
7.4.210.0060.00916.60
7.4.200.0030.00316.76
7.4.160.0100.00716.39
7.4.150.0090.00917.40
7.4.140.0130.00817.86
7.4.130.0070.01016.63
7.4.120.0070.01116.54
7.4.110.0100.01316.82
7.4.100.0140.00316.52
7.4.90.0140.00516.65
7.4.80.0040.01819.39
7.4.70.0130.00716.56
7.4.60.0150.00316.66
7.4.50.0000.00816.45
7.4.40.0080.00816.72
7.4.30.0090.01216.74
7.4.00.0080.00815.19
7.3.330.0060.00013.42
7.3.320.0030.00313.40
7.3.310.0050.00316.46
7.3.300.0000.00716.49
7.3.290.0080.00616.43
7.3.280.0090.00916.47
7.3.270.0090.01417.40
7.3.260.0120.00616.64
7.3.250.0120.00916.52
7.3.240.0190.01116.49
7.3.230.0060.01016.48
7.3.210.0100.00716.57
7.3.200.0030.01319.39
7.3.190.0130.00316.58
7.3.180.0040.01116.36
7.3.170.0060.01216.38
7.3.160.0070.01016.71
7.3.120.0090.00914.76
7.3.110.0100.00815.05
7.3.100.0050.01314.72
7.3.90.0070.00614.92
7.3.80.0050.00814.69
7.3.70.0040.01014.86
7.3.60.0090.00414.96
7.3.50.0060.00614.90
7.3.40.0120.00315.00
7.3.30.0080.00614.84
7.3.20.0100.00516.72
7.3.10.0080.00816.60
7.3.00.0110.00316.67
7.2.330.0130.00416.86
7.2.320.0070.01916.56
7.2.310.0100.01116.52
7.2.300.0030.01716.96
7.2.290.0060.01216.52
7.2.250.0000.02015.06
7.2.240.0060.01315.29
7.2.230.0040.01115.12
7.2.220.0080.00614.94
7.2.210.0020.01115.30
7.2.200.0030.01115.07
7.2.190.0100.00315.21
7.2.180.0020.01315.23
7.2.170.0030.01015.18
7.2.160.0080.00815.14
7.2.150.0120.00316.91
7.2.140.0030.01716.81
7.2.130.0040.01117.07
7.2.120.0070.01117.07
7.2.110.0040.01416.99
7.2.100.0030.01217.04
7.2.90.0120.00617.09
7.2.80.0120.00617.01
7.2.70.0030.01417.15
7.2.60.0000.01117.16
7.2.50.0060.01016.86
7.2.40.0000.01317.02
7.2.30.0060.00317.16
7.2.20.0120.00316.66
7.2.10.0070.00716.84
7.2.00.0050.00818.05
7.1.330.0030.01315.79
7.1.320.0050.01115.93
7.1.310.0050.00915.87
7.1.300.0030.00915.78
7.1.290.0080.00515.80
7.1.280.0020.01315.65
7.1.270.0060.00715.92
7.1.260.0040.00815.53
7.1.250.0080.00815.86
7.1.100.0030.01017.99
7.1.70.0000.00717.35
7.1.60.0160.00919.46
7.1.50.0180.01134.55
7.1.00.0070.07322.40
7.0.200.0060.00316.70
7.0.140.0000.03722.04
7.0.100.0230.04320.02
7.0.90.0070.05019.96
7.0.80.0330.04719.99
7.0.70.0130.07719.94
7.0.60.0070.04720.13
7.0.50.0230.07720.44
7.0.40.0100.06720.05
7.0.30.0070.04020.00
7.0.20.0100.05320.07
7.0.10.0070.05020.02
7.0.00.0030.08320.13
5.6.280.0100.07021.12
5.6.250.0030.08320.70
5.6.240.0070.08020.70
5.6.230.0170.07720.57
5.6.220.0030.04720.63
5.6.210.0100.07020.84
5.6.200.0100.06721.21
5.6.190.0070.04721.02
5.6.180.0100.07721.19
5.6.170.0070.05321.14
5.6.160.0070.08021.01
5.6.150.0100.04321.11
5.6.140.0030.05721.20
5.6.130.0100.04721.13
5.6.120.0130.08021.21
5.6.110.0030.05021.04
5.6.100.0070.07021.11
5.6.90.0000.05021.15
5.6.80.0030.05020.57
5.6.70.0000.08320.46
5.6.60.0070.05020.45
5.6.50.0100.07720.41
5.6.40.0130.06320.60
5.6.30.0130.03320.50
5.6.20.0100.07320.46
5.6.10.0100.07020.38
5.6.00.0170.06020.46
5.5.380.0030.08720.64
5.5.370.0100.08020.56
5.5.360.0130.04320.50
5.5.350.0170.07320.45
5.5.340.0100.06720.79
5.5.330.0200.06020.68
5.5.320.0200.06720.90
5.5.310.0130.07020.86
5.5.300.0100.08020.91
5.5.290.0030.06320.79
5.5.280.0100.08320.93
5.5.270.0130.07320.86
5.5.260.0070.08720.85
5.5.250.0030.07020.70
5.5.240.0030.05020.32
5.5.230.0030.06720.21
5.5.220.0130.06720.31
5.5.210.0170.07320.30
5.5.200.0100.06720.20
5.5.190.0030.04720.29
5.5.180.0070.08720.21
5.5.160.0130.06020.18
5.5.150.0130.07320.34
5.5.140.0070.07720.25
5.5.130.0070.08020.29
5.5.120.0070.08020.18
5.5.110.0130.04020.18
5.5.100.0100.07020.20
5.5.90.0030.07320.14
5.5.80.0000.08020.14
5.5.70.0070.07720.20
5.5.60.0070.07020.12
5.5.50.0130.06720.13
5.5.40.0030.07320.17
5.5.30.0030.08020.20
5.5.20.0070.04720.12
5.5.10.0130.07020.07
5.5.00.0000.08020.17
5.4.450.0130.06319.17
5.4.440.0100.08319.37
5.4.430.0070.06719.44
5.4.420.0030.05319.45
5.4.410.0030.04019.18
5.4.400.0030.06319.16
5.4.390.0170.06718.91
5.4.380.0100.07019.23
5.4.370.0070.07319.16
5.4.360.0130.06018.85
5.4.350.0030.05319.16
5.4.340.0070.07719.13
5.4.320.0100.07719.21
5.4.310.0070.06319.22
5.4.300.0030.07319.20
5.4.290.0030.05019.23
5.4.280.0130.07019.07
5.4.270.0030.06319.04
5.4.260.0070.06319.25
5.4.250.0100.06719.18
5.4.240.0070.05719.15
5.4.230.0030.05318.94
5.4.220.0070.06019.05
5.4.210.0030.08319.15
5.4.200.0030.08018.88
5.4.190.0030.07719.20
5.4.180.0230.07019.12
5.4.170.0100.07318.89
5.4.160.0130.07019.20
5.4.150.0030.04719.18
5.4.140.0070.03716.50
5.4.130.0000.07316.24
5.4.120.0130.06316.38
5.4.110.0130.06716.29
5.4.100.0030.04316.48
5.4.90.0030.08016.54
5.4.80.0070.07016.39
5.4.70.0070.04316.54
5.4.60.0130.07016.53
5.4.50.0000.08316.54
5.4.40.0130.06016.53
5.4.30.0000.06316.49
5.4.20.0070.05016.49
5.4.10.0070.05316.41
5.4.00.0070.07015.93

preferences:
67.68 ms | 401 KiB | 5 Q