reflection
0.4.4
Typhoon reflection is an alternative to native PHP reflection. It is:
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 TyphoonreflectionTyphoonReflector;
use TyphoonTypetypes;
use function TyphoonTypestringify;
/**
* @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.