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; use Translation\Impl\BaseTranslator; interface Translator {} class TranslatorFactory { /** * @throws \ReflectionException */ public static function getTranslator(Translatable $a, Translatable $b): Translator { $translatorNamespace = (new \ReflectionClass(BaseTranslator::class))->getNamespaceName(); $translatorClassName = $translatorNamespace . '\\TranslatorFor' . (new \ReflectionClass($a))->getShortName() . 'And' . (new \ReflectionClass($b))->getShortName(); return new $translatorClassName(); } } } namespace Translation\Impl { use Translation\Translator; class BaseTranslator implements Translator {} class Translator1 extends BaseTranslator {} class_alias(Translator1::class, TranslatorForTranslatable1AndTranslatable2::class); class Translator2 extends BaseTranslator {} class_alias(Translator2::class, TranslatorForTranslatable1AndTranslatable3::class); class Translator3 extends BaseTranslator {} class_alias(Translator3::class, TranslatorForTranslatable2AndTranslatable3::class); } namespace { use Translatable\Impl\Translatable1; use Translatable\Impl\Translatable3; use Translation\TranslatorFactory; $translatable1 = new Translatable1(); $translatable3 = new Translatable3(); $translator = TranslatorFactory::getTranslator($translatable1, $translatable3); var_dump($translator); }
Output for git.master, git.master_jit, rfc.property-hooks
object(Translation\Impl\Translator2)#3 (0) { }

This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.

Active branches

Archived branches

Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page


preferences:
31.43 ms | 405 KiB | 5 Q