GitHub - typhoon-php/reflection: Static PHP reflection with phpDoc support
composer require typhoon/reflection typhoon/phpstorm-reflection-stubs
typhoon/phpstorm-reflection-stubs is a bridge for jetbrains/phpstorm-stubs. Without this package internal classes
and functions are reflected from native reflection without templates.
use Typhoon\Reflection\TyphoonReflector; use Typhoon\Type\types; use function Typhoon\Type\stringify; /** * @template TTag of non-empty-string */ final readonly class Article { /** * @param list<TTag> $tags */ public function __construct( private array $tags, ) {} } $reflector = TyphoonReflector::build(); $class = $reflector->reflectClass(Article::class); $tagsType = $class->properties()['tags']->type(); var_dump(stringify($tagsType)); // "list<TTag#Article>" $templateResolver = $class->createTemplateResolver([ types::union( types::string('PHP'), types::string('Architecture'), ), ]); var_dump(stringify($tagsType->accept($templateResolver))); // "list<'PHP'|'Architecture'>"
Documentation is still far from being complete. Don't hesitate to create issues to clarify how things work.