GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - typhoon-php/reflection: Static PHP reflection with phpDoc support

BranchesTags
Open more actions menu

Latest commit

 

History

634 Commits
634 Commits

Folders and files

NameName
Last commit message
Last commit date
.github/workflows
.github/workflows
 
 
docs
docs
 
 
src
src
 
 
stubs
stubs
 
 
tests
tests
 
 
tools
tools
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.php-cs-fixer.dist.php
.php-cs-fixer.dist.php
 
 
CHANGELOG.md
CHANGELOG.md
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
composer-require-checker.json
composer-require-checker.json
 
 
composer.json
composer.json
 
 
composer.lock
composer.lock
 
 
infection.json5.dist
infection.json5.dist
 
 
phpunit.xml.dist
phpunit.xml.dist
 
 
psalm.xml.dist
psalm.xml.dist
 
 

Repository files navigation

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

  • Native reflection adapters
  • Reflecting Types
  • Reflecting PHPDoc properties and methods
  • Implementing custom types
  • Caching

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

About

Static PHP reflection with phpDoc support

Topics

phpphp-library

Resources

Readme
MIT license
Activity
Custom properties

Stars

40 stars

Watchers

4 watching

Forks

3 forks
Report repository

Releases

Sponsor this project

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.