3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace RefactoringGuru\Flyweight\Conceptual; /** * Легковес хранит общую часть состояния (также называемую внутренним * состоянием), которая принадлежит нескольким реальным бизнес-объектам. * Легковес принимает оставшуюся часть состояния (внешнее состояние, уникальное * для каждого объекта) через его параметры метода. * @source https://refactoring.guru/ru/design-patterns/flyweight/php/example#example-1 */ class Flyweight { private $sharedState; public function __construct($sharedState) { $this->sharedState = $sharedState; } public function operation($uniqueState): void { $s = json_encode($this->sharedState); $u = json_encode($uniqueState); echo "Flyweight: Displaying shared ($s) and unique ($u) state.\n"; } } /** * Фабрика Легковесов создает объекты-Легковесы и управляет ими. Она * обеспечивает правильное разделение легковесов. Когда клиент запрашивает * легковес, фабрика либо возвращает существующий экземпляр, либо создает новый, * если он ещё не существует. */ class FlyweightFactory { /** * @var Flyweight[] */ private $flyweights = []; public function __construct(array $initialFlyweights) { foreach ($initialFlyweights as $state) { $this->flyweights[$this->getKey($state)] = new Flyweight($state); } } /** * Возвращает хеш строки Легковеса для данного состояния. */ private function getKey(array $state): string { ksort($state); return implode("_", $state); } /** * Возвращает существующий Легковес с заданным состоянием или создает новый. */ public function getFlyweight(array $sharedState): Flyweight { $key = $this->getKey($sharedState); if (!isset($this->flyweights[$key])) { echo "FlyweightFactory: Can't find a flyweight, creating new one.\n"; $this->flyweights[$key] = new Flyweight($sharedState); } else { echo "FlyweightFactory: Reusing existing flyweight.\n"; } return $this->flyweights[$key]; } public function listFlyweights(): void { $count = count($this->flyweights); echo "\nFlyweightFactory: I have $count flyweights:\n"; foreach ($this->flyweights as $key => $flyweight) { echo $key . "\n"; } } } /** * Клиентский код обычно создает кучу предварительно заполненных легковесов на * этапе инициализации приложения. */ $factory = new FlyweightFactory([ ["Chevrolet", "Camaro2018", "pink"], ["Mercedes Benz", "C300", "black"], ["Mercedes Benz", "C500", "red"], ["BMW", "M5", "red"], ["BMW", "X6", "white"], // ... ]); $factory->listFlyweights(); // ... function addCarToPoliceDatabase( FlyweightFactory $ff, $plates, $owner, $brand, $model, $color ) { echo "\nClient: Adding a car to database.\n"; $flyweight = $ff->getFlyweight([$brand, $model, $color]); // Клиентский код либо сохраняет, либо вычисляет внешнее состояние и // передает его методам легковеса. $flyweight->operation([$plates, $owner]); } addCarToPoliceDatabase($factory, "CL234IR", "James Doe", "BMW", "M5", "red", ); addCarToPoliceDatabase($factory, "CL234IR", "James Doe", "BMW", "X1", "red", ); $factory->listFlyweights();

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.0120.00916.63
8.3.50.0120.00320.07
8.3.40.0090.00618.85
8.3.30.0090.00618.85
8.3.20.0040.00424.18
8.3.10.0070.00024.66
8.3.00.0000.00826.16
8.2.180.0170.00725.92
8.2.170.0110.00418.91
8.2.160.0090.00622.96
8.2.150.0000.00825.66
8.2.140.0040.00424.66
8.2.130.0000.00726.16
8.2.120.0080.00026.16
8.2.110.0060.00319.27
8.2.100.0090.00617.91
8.2.90.0000.00817.75
8.2.80.0090.00018.73
8.2.70.0000.00817.63
8.2.60.0000.00817.50
8.2.50.0040.00417.63
8.2.40.0000.00818.22
8.2.30.0050.00318.16
8.2.20.0040.00418.22
8.2.10.0060.00319.29
8.2.00.0000.00719.32
8.1.280.0130.00325.92
8.1.270.0080.00023.99
8.1.260.0040.00426.35
8.1.250.0070.00328.09
8.1.240.0090.00022.58
8.1.230.0120.00017.77
8.1.220.0040.00417.79
8.1.210.0030.00618.77
8.1.200.0060.00617.36
8.1.190.0050.00317.36
8.1.180.0070.00318.10
8.1.170.0050.00318.56
8.1.160.0000.00718.97
8.1.150.0000.00820.38
8.1.140.0040.00418.97
8.1.130.0060.00320.20
8.1.120.0030.00517.50
8.1.110.0040.00417.49
8.1.100.0000.00817.38
8.1.90.0000.00817.49
8.1.80.0070.00317.37
8.1.70.0030.00317.45
8.1.60.0040.00417.58
8.1.50.0000.00817.42
8.1.40.0090.00317.54
8.1.30.0040.00417.66
8.1.20.0000.00817.73
8.1.10.0000.00817.60
8.1.00.0040.00417.40
8.0.300.0090.00018.77
8.0.290.0040.00416.88
8.0.280.0050.00318.48
8.0.270.0000.00718.01
8.0.260.0030.00318.49
8.0.250.0000.00717.02
8.0.240.0040.00416.95
8.0.230.0000.00717.01
8.0.220.0000.00716.88
8.0.210.0040.00416.85
8.0.200.0000.00617.11
8.0.190.0050.00217.06
8.0.180.0040.00417.00
8.0.170.0040.00416.92
8.0.160.0040.00416.87
8.0.150.0020.00516.94
8.0.140.0000.00816.96
8.0.130.0000.00813.35
8.0.120.0030.00616.95
8.0.110.0080.00016.86
8.0.100.0000.00717.02
8.0.90.0060.00216.94
8.0.80.0000.00717.04
8.0.70.0040.00416.85
8.0.60.0030.00516.83
8.0.50.0040.00416.96
8.0.30.0020.00517.04
8.0.20.0000.00817.02
8.0.10.0070.00016.97
8.0.00.0000.00716.97
7.4.330.0030.00315.55
7.4.320.0000.00816.67
7.4.300.0000.00616.66
7.4.290.0040.00416.57
7.4.280.0000.00916.55
7.4.270.0040.00416.64
7.4.260.0030.00313.29
7.4.250.0000.00716.57
7.4.240.0000.00816.65
7.4.230.0030.00316.70
7.4.220.0040.00416.64
7.4.210.0040.00416.64
7.4.200.0030.00316.61
7.4.190.0000.00716.70
7.4.180.0070.00016.67
7.4.160.0070.00016.52
7.4.150.0030.00316.54
7.4.140.0070.00016.25
7.4.130.0070.00016.30
7.4.120.0030.00316.46
7.4.110.0020.00516.50
7.4.100.0000.00716.45
7.4.90.0000.00816.64
7.4.80.0050.00316.48
7.4.70.0030.00316.57
7.4.60.0030.00316.30
7.4.50.0030.00516.29
7.4.40.0040.00416.51
7.4.30.0040.00416.49
7.4.20.0070.00016.30
7.4.10.0030.00316.30
7.4.00.0000.00716.30
7.3.330.0020.00516.42
7.3.320.0000.00613.41
7.3.310.0050.00216.41
7.3.300.0000.00716.27
7.3.290.0030.00316.40
7.3.280.0030.00316.15
7.3.270.0000.00716.40
7.3.260.0050.00316.32
7.3.250.0000.00816.40
7.3.240.0030.00316.34
7.3.230.0000.00716.40
7.3.220.0050.00316.34
7.3.210.0030.00616.23
7.3.200.0040.00416.31
7.3.190.0000.00816.36
7.3.180.0040.00416.29
7.3.170.0000.00716.33
7.3.160.0070.00016.18
7.3.150.0070.00016.33
7.3.140.0000.00716.34
7.3.130.0030.00316.20
7.3.120.0030.00316.20
7.3.110.0070.00016.14
7.3.100.0000.00816.26
7.3.90.0030.00516.61
7.3.80.0070.00016.20
7.3.70.0000.00716.45
7.3.60.0040.00416.37
7.3.50.0000.00816.51
7.3.40.0000.00716.54
7.3.30.0030.00616.51
7.3.20.0000.00918.34
7.3.10.0080.00018.12
7.3.00.0040.00418.07

preferences:
63.82 ms | 400 KiB | 5 Q