3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace RefactoringGuru\ChainOfResponsibility\Conceptual; /** * Интерфейс Обработчика объявляет метод построения цепочки обработчиков. Он * также объявляет метод для выполнения запроса. */ interface Handler { public function setNext(Handler $handler): Handler; public function handle(string $request): ?string; } /** * Поведение цепочки по умолчанию может быть реализовано внутри базового класса * обработчика. */ abstract class AbstractHandler implements Handler { /** * @var Handler */ private $nextHandler; public function setNext(Handler $handler): Handler { $this->nextHandler = $handler; // Возврат обработчика отсюда позволит связать обработчики простым // способом, вот так: // $monkey->setNext($squirrel)->setNext($dog); return $handler; } public function handle(string $request): ?string { if ($this->nextHandler) { return $this->nextHandler->handle($request); } return null; } } /** * Все Конкретные Обработчики либо обрабатывают запрос, либо передают его * следующему обработчику в цепочке. */ class MonkeyHandler extends AbstractHandler { public function handle(string $request): ?string { if ($request === "Banana") { return "Monkey: I'll eat the " . $request . ".\n"; } else { return parent::handle($request); } } } class SquirrelHandler extends AbstractHandler { public function handle(string $request): ?string { if ($request === "Nut") { return "Squirrel: I'll eat the " . $request . ".\n"; } else { return parent::handle($request); } } } class DogHandler extends AbstractHandler { public function handle(string $request): ?string { if ($request === "MeatBall") { return "Dog: I'll eat the " . $request . ".\n"; } else { return parent::handle($request); } } } /** * Обычно клиентский код приспособлен для работы с единственным обработчиком. В * большинстве случаев клиенту даже неизвестно, что этот обработчик является * частью цепочки. */ function clientCode(Handler $handler) { foreach (["Nut", "Banana", "Cup of coffee"] as $food) { echo "Client: Who wants a " . $food . "?\n"; $result = $handler->handle($food); if ($result) { echo " " . $result; } else { echo " " . $food . " was left untouched.\n"; } } } /** * Другая часть клиентского кода создает саму цепочку. */ $monkey = new MonkeyHandler(); $squirrel = new SquirrelHandler(); $dog = new DogHandler(); $monkey->setNext($squirrel)->setNext($dog); /** * Клиент должен иметь возможность отправлять запрос любому обработчику, а не * только первому в цепочке. */ echo "Chain: Monkey > Squirrel > Dog\n\n"; clientCode($monkey); echo "\n"; echo "Subchain: Squirrel > Dog\n\n"; clientCode($squirrel);

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.0140.00716.63
8.3.50.0140.00718.21
8.3.40.0140.00718.97
8.3.30.0140.00418.84
8.3.20.0080.00024.18
8.3.10.0100.00624.66
8.3.00.0040.00426.16
8.2.180.0140.00325.92
8.2.170.0070.01118.64
8.2.160.0140.00022.96
8.2.150.0050.00325.66
8.2.140.0040.00424.66
8.2.130.0040.00426.16
8.2.120.0080.00021.12
8.2.110.0100.00019.31
8.2.100.0060.00619.45
8.2.90.0000.00817.75
8.2.80.0030.00518.78
8.2.70.0000.00817.50
8.2.60.0000.00817.80
8.2.50.0060.00318.07
8.2.40.0000.00818.28
8.2.30.0040.00417.98
8.2.20.0000.00718.11
8.2.10.0000.00819.15
8.2.00.0000.00719.16
8.1.280.0090.00525.92
8.1.270.0050.00523.90
8.1.260.0000.00926.35
8.1.250.0070.00028.09
8.1.240.0000.00823.97
8.1.230.0000.01117.64
8.1.220.0040.00417.74
8.1.210.0090.00018.77
8.1.200.0030.00617.48
8.1.190.0030.00617.35
8.1.180.0000.00818.10
8.1.170.0060.00318.57
8.1.160.0050.00218.84
8.1.150.0050.00320.46
8.1.140.0000.00718.99
8.1.130.0040.00422.00
8.1.120.0000.00717.40
8.1.110.0000.00717.52
8.1.100.0040.00417.42
8.1.90.0030.00517.40
8.1.80.0040.00417.57
8.1.70.0030.00317.57
8.1.60.0030.00517.68
8.1.50.0090.00017.48
8.1.40.0030.01017.44
8.1.30.0040.00417.53
8.1.20.0000.00917.72
8.1.10.0040.00417.66
8.1.00.0080.00017.53
8.0.300.0020.00518.77
8.0.290.0000.00917.00
8.0.280.0030.00318.49
8.0.270.0000.00818.11
8.0.260.0000.00618.53
8.0.250.0060.00317.04
8.0.240.0040.00416.97
8.0.230.0000.00717.06
8.0.220.0000.00716.92
8.0.210.0060.00316.99
8.0.200.0070.00017.03
8.0.190.0080.00017.07
8.0.180.0000.00817.04
8.0.170.0040.00417.07
8.0.160.0040.00416.98
8.0.150.0000.00716.97
8.0.140.0030.00616.97
8.0.130.0000.00513.46
8.0.120.0030.00616.88
8.0.110.0060.00316.98
8.0.100.0030.00617.00
8.0.90.0030.00516.84
8.0.80.0000.01016.94
8.0.70.0030.00716.91
8.0.60.0000.01016.83
8.0.50.0100.00016.96
8.0.30.0030.00716.98
8.0.20.0000.00917.10
8.0.10.0000.00817.17
8.0.00.0100.00017.18
7.4.330.0030.00315.55
7.4.320.0050.00316.55
7.4.300.0030.00316.55
7.4.290.0040.00416.61
7.4.280.0000.00816.55
7.4.270.0040.00416.62
7.4.260.0030.00313.22
7.4.250.0000.00716.53
7.4.240.0090.00016.67
7.4.230.0040.00416.67
7.4.220.0040.00416.46
7.4.210.0060.00316.55
7.4.200.0050.00316.51
7.4.190.0060.00316.63
7.4.180.0040.00416.59
7.4.160.0060.00316.69
7.4.150.0030.00616.43
7.4.140.0060.00316.37
7.4.130.0090.00016.49
7.4.120.0000.00816.44
7.4.110.0040.00416.45
7.4.100.0080.00016.45
7.4.90.0040.00416.50
7.4.80.0000.00816.50
7.4.70.0030.00716.48
7.4.60.0030.00616.55
7.4.50.0030.00616.45
7.4.40.0030.00716.36
7.4.30.0070.00316.40
7.4.20.0070.00316.53
7.4.10.0030.00716.57
7.4.00.0070.00316.58
7.3.330.0030.00616.29
7.3.320.0030.00613.28
7.3.310.0000.00816.33
7.3.300.0060.00316.42
7.3.290.0030.00616.46
7.3.280.0060.00316.48
7.3.270.0030.00616.25
7.3.260.0030.00516.45
7.3.250.0030.00616.46
7.3.240.0040.00416.29
7.3.230.0000.00916.48
7.3.220.0000.00916.38
7.3.210.0030.00616.23
7.3.200.0000.00816.42
7.3.190.0060.00316.33
7.3.180.0030.00616.41
7.3.170.0000.00816.41
7.3.160.0030.00616.48
7.3.150.0000.00816.24
7.3.140.0040.00416.39
7.3.130.0060.00316.33
7.3.120.0060.00316.48
7.3.110.0000.00816.30
7.3.100.0040.00416.27
7.3.90.0030.00616.45
7.3.80.0060.00316.23
7.3.70.0060.00316.59
7.3.60.0040.00416.58
7.3.50.0060.00316.42
7.3.40.0030.00516.57
7.3.30.0030.00516.37
7.3.20.0000.00916.57
7.3.10.0040.00416.44
7.3.00.0060.00316.63

preferences:
63.87 ms | 401 KiB | 5 Q