3v4l.org

run code in 300+ PHP versions simultaneously
<?php namespace Translatable { interface Translatable {} } namespace Translatable\Impl { use Translatable\Translatable; class Translatable1 implements Translatable {} class Translatable2 implements Translatable {} class Translatable3 implements Translatable {} } namespace Translation { use Translatable\Translatable; interface Translator { public static function canTranslateBetween(Translatable $translatable1, Translatable $translatable2): bool; } class TranslatorFactory { /** @var string[] */ private $translatorClasses; public function __construct(array $translatorClasses) { $this->translatorClasses = $translatorClasses; } public function createTranslator(Translatable $a, Translatable $b): Translator { foreach ($this->translatorClasses as $translatorClass) { if ($translatorClass::canTranslateBetween($a, $b)) { return new $translatorClass; } } throw new \RuntimeException('Could not find translator.'); } } } namespace Translation\Impl { use Translatable\Impl\Translatable1; use Translatable\Impl\Translatable3; use Translatable\Translatable; use Translation\Translator; abstract class BaseTranslator implements Translator {} class Translator1 extends BaseTranslator { public static function canTranslateBetween(Translatable $translatable1, Translatable $translatable2): bool { return $translatable1 instanceof Translatable1 && $translatable2 instanceof Translatable3; } } class Translator2 extends BaseTranslator { public static function canTranslateBetween(Translatable $translatable1, Translatable $translatable2): bool { return false; } } class Translator3 extends BaseTranslator { public static function canTranslateBetween(Translatable $translatable1, Translatable $translatable2): bool { return false; } } } namespace { use Translatable\Impl\Translatable1; use Translatable\Impl\Translatable3; use Translation\Impl\Translator1; use Translation\Impl\Translator2; use Translation\Impl\Translator3; use Translation\TranslatorFactory; $translatorFactory = new TranslatorFactory([ Translator1::class, Translator2::class, Translator3::class ]); $translatable1 = new Translatable1(); $translatable3 = new Translatable3(); $translator = $translatorFactory->createTranslator($translatable1, $translatable3); var_dump($translator); }

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.5.10.0100.00718.72
8.5.00.0120.01020.20
8.4.150.0020.00014.05
8.4.140.0120.00917.43
8.4.130.0070.00317.92
8.4.120.0110.00920.52
8.4.110.0120.00718.66
8.4.100.0050.00517.71
8.4.90.0100.01217.84
8.4.80.0050.00519.54
8.4.70.0130.00818.12
8.4.60.0070.00118.59
8.4.50.0110.00918.52
8.4.40.0130.00720.42
8.4.30.0130.00620.18
8.4.20.0090.01219.61
8.4.10.0030.00617.75
8.3.280.0110.00918.53
8.3.270.0150.00716.91
8.3.260.0110.00916.62
8.3.250.0100.00817.18
8.3.240.0130.00616.50
8.3.230.0110.00816.62
8.3.220.0060.00916.52
8.3.210.0170.00516.79
8.3.200.0040.00516.71
8.3.190.0080.01117.04
8.3.180.0050.00316.95
8.3.170.0160.00317.19
8.3.160.0040.01418.21
8.3.150.0000.00916.59
8.3.140.0070.00317.33
8.3.130.0090.00018.43
8.3.120.0060.01218.91
8.3.110.0100.01020.94
8.3.100.0070.01324.06
8.3.90.0080.00326.77
8.3.80.0030.00716.75
8.3.70.0060.01216.75
8.3.60.0120.00318.30
8.3.50.0050.00823.63
8.3.40.0080.00818.94
8.3.30.0110.00418.76
8.3.20.0030.00621.70
8.3.10.0030.00520.41
8.3.00.0040.00420.57
8.2.290.0110.00920.71
8.2.280.0070.00718.52
8.2.270.0140.00417.34
8.2.260.0040.00416.61
8.2.250.0000.00816.66
8.2.240.0090.00618.70
8.2.230.0090.00022.58
8.2.220.0040.00437.54
8.2.210.0030.00526.77
8.2.200.0030.00616.88
8.2.190.0140.00718.41
8.2.180.0110.00416.36
8.2.170.0170.00022.96
8.2.160.0130.00020.38
8.2.150.0060.00324.18
8.2.140.0000.00824.66
8.2.130.0040.00426.16
8.2.120.0040.00426.16
8.2.110.0000.00920.38
8.2.100.0130.00417.59
8.2.90.0000.00817.63
8.2.80.0040.00418.74
8.2.70.0080.00017.62
8.2.60.0050.00317.63
8.2.50.0080.00018.04
8.2.40.0040.00418.34
8.2.30.0030.00618.09
8.2.20.0000.00818.07
8.2.10.0040.00419.25
8.2.00.0040.00419.26
8.1.330.0130.00622.25
8.1.320.0150.00416.07
8.1.310.0100.00718.48
8.1.300.0040.00816.11
8.1.290.0060.00318.88
8.1.280.0080.00625.92
8.1.270.0040.00420.78
8.1.260.0000.00726.35
8.1.250.0000.00728.09
8.1.240.0030.00621.99
8.1.230.0070.00422.70
8.1.220.0060.00318.56
8.1.210.0000.00818.77
8.1.200.0030.00517.36
8.1.190.0030.00617.13
8.1.180.0060.00318.10
8.1.170.0040.00417.62
8.1.160.0040.00418.91
8.1.150.0000.00718.91
8.1.140.0070.00022.06
8.1.130.0030.00320.17
8.1.120.0000.00717.48
8.1.110.0090.00017.44
8.1.100.0070.00017.46
8.1.90.0080.00017.39
8.1.80.0000.00817.50
8.1.70.0050.00317.35
8.1.60.0040.00817.64
8.1.50.0080.00017.43
8.1.40.0040.00417.49
8.1.30.0060.00317.68
8.1.20.0000.00817.72
8.1.10.0080.00017.44
8.1.00.0000.00817.54
8.0.300.0040.00418.77
8.0.290.0040.00416.75
8.0.280.0030.00318.46
8.0.270.0030.00318.08
8.0.260.0030.00320.12
8.0.250.0050.00316.92
8.0.240.0000.01017.08
8.0.230.0070.00016.93
8.0.220.0050.00217.01
8.0.210.0000.00816.86
8.0.200.0040.00416.99
8.0.190.0000.00717.02
8.0.180.0030.00616.97
8.0.170.0000.00916.91
8.0.160.0000.00816.82
8.0.150.0070.00016.89
8.0.140.0040.00416.92
8.0.130.0060.00013.37
8.0.120.0050.00316.83
8.0.110.0000.00716.97
8.0.100.0090.00016.95
8.0.90.0090.00016.92
8.0.80.0060.00917.02
8.0.70.0030.00517.09
8.0.60.0030.00516.93
8.0.50.0040.00416.86
8.0.30.0110.00816.99
8.0.20.0140.00817.37
8.0.10.0000.00817.08
8.0.00.0080.01116.76
7.4.330.0000.00616.89
7.4.320.0030.00316.45
7.4.300.0030.00316.62
7.4.290.0040.00416.52
7.4.280.0000.00816.51
7.4.270.0030.00316.48
7.4.260.0030.00313.40
7.4.250.0000.00716.48
7.4.240.0050.00416.55
7.4.230.0070.00016.41
7.4.220.0040.00416.57
7.4.210.0070.01016.55
7.4.200.0030.00316.27
7.4.130.0110.00716.35
7.4.120.0120.00916.36
7.4.110.0060.01116.47
7.4.100.0180.00016.56
7.4.90.0140.00716.58
7.4.80.0070.01019.39
7.4.70.0030.01316.39
7.4.60.0110.00616.50
7.4.50.0060.01016.45
7.4.40.0060.01116.52
7.4.00.0110.00814.72
7.3.330.0040.00416.46
7.3.320.0050.00013.29
7.3.310.0040.00416.28
7.3.300.0030.00316.43
7.3.290.0000.00716.43
7.3.260.0150.00316.60
7.3.240.0080.01016.60
7.3.230.0140.00216.46
7.3.210.0130.00316.38
7.3.200.0090.00916.61
7.3.190.0130.00316.43
7.3.180.0150.00916.49
7.3.170.0100.00716.35
7.3.160.0030.01216.62
7.3.120.0080.01114.78
7.3.110.0030.01114.82
7.3.100.0060.01114.83
7.3.90.0050.00914.86
7.3.80.0090.00714.84
7.3.70.0060.00914.77
7.3.60.0090.00515.00
7.3.50.0040.00814.88
7.3.40.0040.01014.81
7.3.30.0060.00814.90
7.3.20.0130.00215.83
7.3.10.0320.00615.78
7.3.00.0090.00715.69
7.2.330.0100.01016.80
7.2.320.0100.00616.82
7.2.310.0170.00016.85
7.2.300.0100.01416.68
7.2.290.0080.01516.79
7.2.250.0090.00815.04
7.2.240.0070.01015.03
7.2.230.0070.01115.09
7.2.220.0060.00914.83
7.2.210.0080.00915.17
7.2.200.0060.01014.99
7.2.190.0070.00614.73
7.2.180.0070.01015.01
7.2.170.0030.01315.13
7.2.160.0060.00815.04
7.2.150.0070.01016.04
7.2.140.0080.00916.03
7.2.130.0080.00716.00
7.2.120.0060.00815.92
7.2.110.0070.00916.00
7.2.100.0110.00616.03
7.2.90.0090.00616.00
7.2.80.0060.01115.96
7.2.70.0100.00915.89
7.2.60.0060.01116.00
7.2.50.0080.00916.01
7.2.40.0050.01216.00
7.2.30.0060.01115.91
7.2.20.0070.00715.94
7.2.10.0120.00315.92
7.2.00.0100.00416.00

preferences:
40.09 ms | 403 KiB | 5 Q