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); }
Output for 7.2.0 - 7.2.33, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.28, 8.4.1 - 8.4.14, 8.5.0 - 8.5.1
object(Translation\Impl\Translator1)#4 (0) { }
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.

preferences:
186.27 ms | 407 KiB | 5 Q