Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Reflection Laravel Package

typhoon/reflection

Static, fast alternative to PHP’s native Reflection. Reflects code without running or autoloading it, uses lazy loading + caching, and stays compatible with native reflection. Supports Psalm/PHPStan phpDoc types, template resolution, and avoids memory leaks (safe with zend.enable_gc=0).

View on GitHub
Deep Wiki
Context7

Typhoon Reflection

PHP Version Requirement GitHub Release Psalm Level Psalm Type Coverage Code Coverage Mutation testing badge

Typhoon Reflection is an alternative to native PHP Reflection. It is:

  • static (does not run or autoload reflected code),
  • fast (due to lazy loading and caching),
  • fully compatible with native reflection,
  • supports most of the Psalm and PHPStan phpDoc types,
  • can resolve templates,
  • does not leak memory and can be safely used with zend.enable_gc=0.

Installation

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.

Basic Usage

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

Documentation is still far from being complete. Don't hesitate to create issues to clarify how things work.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
shitoudev/permissionmanager
johannesclimacus/laravel-tui
hocvt/seotools
vitalybaev/sypexgeo
amphibee/themosis-ignition
gito-me/fast-excel
frankyso/laravel-ipaymu
geolize-studio/laravel-chile
boomerangui/chat
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console