3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace RefactoringGuru\Singleton\Conceptual; /** * Класс Одиночка предоставляет метод `GetInstance`, который ведёт себя как * альтернативный конструктор и позволяет клиентам получать один и тот же * экземпляр класса при каждом вызове. */ class Singleton { /** * Объект одиночки храниться в статичном поле класса. Это поле — массив, так * как мы позволим нашему Одиночке иметь подклассы. Все элементы этого * массива будут экземплярами кокретных подклассов Одиночки. Не волнуйтесь, * мы вот-вот познакомимся с тем, как это работает. */ private static $instances = []; /** * Конструктор Одиночки всегда должен быть скрытым, чтобы предотвратить * создание объекта через оператор new. */ protected function __construct() { } /** * Одиночки не должны быть клонируемыми. */ protected function __clone() { } /** * Одиночки не должны быть восстанавливаемыми из строк. */ public function __wakeup() { throw new \Exception("Cannot unserialize a singleton."); } /** * Это статический метод, управляющий доступом к экземпляру одиночки. При * первом запуске, он создаёт экземпляр одиночки и помещает его в * статическое поле. При последующих запусках, он возвращает клиенту объект, * хранящийся в статическом поле. * * Эта реализация позволяет вам расширять класс Одиночки, сохраняя повсюду * только один экземпляр каждого подкласса. */ public static function getInstance(): Singleton { $cls = static::class; if (!isset(self::$instances[$cls])) { self::$instances[$cls] = new static(); } return self::$instances[$cls]; } /** * Наконец, любой одиночка должен содержать некоторую бизнес-логику, которая * может быть выполнена на его экземпляре. */ public function someBusinessLogic() { // ... } } /** * Клиентский код. */ function clientCode() { $s1 = Singleton::getInstance(); $s2 = Singleton::getInstance(); if ($s1 === $s2) { echo "Singleton works, both variables contain the same instance."; } else { echo "Singleton failed, variables contain different instances."; } } clientCode();

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.0070.01416.75
8.3.50.0140.00717.86
8.3.40.0120.00318.77
8.3.30.0120.00318.71
8.3.20.0040.00424.18
8.3.10.0040.00424.66
8.3.00.0140.00326.16
8.2.180.0110.00325.92
8.2.170.0190.00319.09
8.2.160.0070.00722.96
8.2.150.0040.00425.66
8.2.140.0080.00024.66
8.2.130.0040.00426.16
8.2.120.0080.00026.16
8.2.110.0000.00921.06
8.2.100.0000.01217.71
8.2.90.0040.00418.34
8.2.80.0040.00419.14
8.2.70.0080.00017.72
8.2.60.0080.00017.61
8.2.50.0000.01019.35
8.2.40.0040.00419.32
8.2.30.0000.00718.17
8.2.20.0000.00718.20
8.2.10.0070.00019.39
8.2.00.0030.00619.29
8.1.280.0110.00425.92
8.1.270.0060.00320.43
8.1.260.0040.00426.35
8.1.250.0040.00428.09
8.1.240.0030.00923.48
8.1.230.0040.00721.03
8.1.220.0030.00717.74
8.1.210.0090.00018.77
8.1.200.0000.00817.35
8.1.190.0030.00617.35
8.1.180.0030.00618.10
8.1.170.0100.00020.39
8.1.160.0000.00719.05
8.1.150.0040.00418.85
8.1.140.0000.00719.02
8.1.130.0000.00720.14
8.1.120.0030.00517.46
8.1.110.0040.00417.31
8.1.100.0030.00617.40
8.1.90.0070.00017.39
8.1.80.0000.01017.49
8.1.70.0000.00717.36
8.1.60.0030.00717.43
8.1.50.0000.00817.48
8.1.40.0000.00717.58
8.1.30.0000.00817.66
8.1.20.0000.00817.73
8.1.10.0060.00317.64
8.1.00.0040.00417.56
8.0.300.0000.00721.93
8.0.290.0040.00416.63
8.0.280.0030.00318.51
8.0.270.0000.00718.03
8.0.260.0000.00718.59
8.0.250.0070.00017.04
8.0.240.0040.00416.92
8.0.230.0030.00416.89
8.0.220.0000.00816.89
8.0.210.0070.00016.88
8.0.200.0000.00716.90
8.0.190.0030.00516.99
8.0.180.0070.00016.96
8.0.170.0000.00816.82
8.0.160.0030.00616.88
8.0.150.0070.00016.89
8.0.140.0000.00716.87
8.0.130.0050.00013.30
8.0.120.0040.00416.92
8.0.110.0080.00016.80
8.0.100.0040.00416.79
8.0.90.0000.00716.81
8.0.80.0070.01116.84
8.0.70.0000.01516.95
8.0.60.0000.01416.77
8.0.50.0100.00316.81
8.0.30.0140.00916.85
8.0.20.0190.00316.90
8.0.10.0150.00716.99
8.0.00.0160.00717.08
7.4.330.0040.00015.55
7.4.320.0030.00316.54
7.4.300.0000.01116.54
7.4.290.0050.00316.59
7.4.280.0000.00816.63
7.4.270.0030.00316.64
7.4.260.0070.00013.32
7.4.250.0070.00016.59
7.4.240.0020.00516.55
7.4.230.0070.00016.63
7.4.220.0000.00716.66
7.4.210.0040.01316.51
7.4.200.0060.01216.58
7.4.190.0000.01416.71
7.4.180.0060.01216.69
7.4.160.0150.00816.59
7.4.150.0170.00416.57
7.4.140.0150.00916.52
7.4.130.0090.01416.42
7.4.120.0170.00716.51
7.4.110.0110.01316.47
7.4.100.0110.01216.56
7.4.90.0170.00616.45
7.4.80.0180.00716.52
7.4.70.0150.00816.39
7.4.60.0160.01016.48
7.4.50.0140.01016.54
7.4.40.0170.00516.41
7.4.30.0160.00816.53
7.4.20.0100.01516.42
7.4.10.0140.00816.62
7.4.00.0080.01116.55
7.3.330.0000.00716.26
7.3.320.0000.00613.36
7.3.310.0040.00316.21
7.3.300.0000.00616.21
7.3.290.0090.00916.35
7.3.280.0160.00516.38
7.3.270.0140.00916.40
7.3.260.0150.01016.37
7.3.250.0110.01316.38
7.3.240.0140.00616.33
7.3.230.0160.00516.34
7.3.220.0100.01216.28
7.3.210.0140.00616.30
7.3.200.0170.00516.29
7.3.190.0160.00716.23
7.3.180.0190.00416.32
7.3.170.0140.00716.32
7.3.160.0150.00616.26
7.3.150.0150.00616.30
7.3.140.0140.01116.37
7.3.130.0120.01016.26
7.3.120.0230.00016.30
7.3.110.0110.01116.22
7.3.100.0140.00916.25
7.3.90.0140.01116.62
7.3.80.0140.00916.27
7.3.70.0190.00616.42
7.3.60.0130.00816.44
7.3.50.0150.00616.52
7.3.40.0140.00716.45
7.3.30.0080.01216.50
7.3.20.0180.00316.48
7.3.10.0200.00416.38
7.3.00.0140.01016.47

preferences:
70.79 ms | 401 KiB | 5 Q