goaop/parser-reflection
Parser Reflection brings PHP's Reflection API to static analysis: parse source files into an AST and introspect classes, methods, and properties without autoloading, including, or executing code. Drop-in compatible with native Reflection classes for analyzers, generators, and IDE tooling.
Patch release to improve the performance of engine by creating the parser and the name resolver on the first parse (4.x) in https://github.com/goaop/parser-reflection/pull/239
Full Changelog: https://github.com/goaop/parser-reflection/compare/5.0.0...5.0.1
This release brings the library to full PHP 8.6 reflection parity ahead of the PHP 8.6 GA (planned 2026-11-19): parameter doc comments, scope-aware property accessibility, readonly property defaults, partial function application, and the 8.6 attribute-API additions are all reflected statically from the AST — without loading the reflected code into memory. All 8.6 behavior is validated against PHP 8.6.0RC2 and guarded by runtime version checks, so the library runs identically on PHP 8.5. Tracked in epic #219.
>=8.4) — #218. The CI matrix runs PHP 8.5 (lowest + highest deps) with PHP 8.6 as experimental.nikic/php-parser: ^5.9 is now required — the first release parsing PHP 8.6 partial-application placeholders (ArgPlaceholder) — #224ReflectionAttribute::getArguments(), matching native reflection (previously they were collapsed into a positional list) — #225ReflectionClassConstant::__toString() now prints the constant's doc comment like native reflection, and renders boolean values as true/false on PHP 8.6+ (following the native rendering change) — #225, #223ReflectionParameter::getDocComment() — doc comments on parameters (plain, promoted, variadic, by-ref, combined with attributes), byte-for-byte native parity; available on every supported runtime. Known limitation: a doc comment written after a parameter is dropped by PHP-Parser — #221ReflectionProperty::isReadable() / isWritable() — scope-aware accessibility emulation covering visibility, asymmetric (set) visibility, readonly (incl. the implicit protected(set)), property hooks, virtual properties, and object initialization state; validated against native 8.6 across ~12,800 combinations. Deliberate divergence: scope classes are resolved statically, never autoloaded — #222hasDefaultValue() / getDefaultValue() / getDefaultProperties() for readonly properties with defaults, verified against PHP 8.6.0RC2 across scalar, const-expression, class-constant, enum-case and array defaults — #223f(?), f(name: ?) and f(1, ...) reflect cleanly on every host runtime; placeholder arguments in constant-expression positions degrade into a catchable ReflectionException (the same contract as first-class callables) — #224ReflectionAttribute::getShortName(), getNamespaceName(), inNamespace() and ReflectionConstant::inNamespace() implemented (the inherited native implementations fatal on parsed attributes) — #225#[\Override] on class constants (incl. interface and enum constants) and __debugInfo() on enums are fully reflected — #225strcoll() et al.) report isDeprecated() and their #[\Deprecated] payload correctly through the native fallback — #215getDefaultValueExpression() on typed properties/parameters without a default value — #223isVirtual() no longer misreports a property whose short-form get hook references its own backing store — #222FileWith*86.php stub convention with PHP_VERSION_ID >= 80600 guards) and a deprecation-clean audit against the "Deprecations for PHP 8.6" RFC (no hits) — #220phpunit/phpunit ^13.3, rector/rector ^2.6.7 (required: Rector preloads its bundled php-parser under PHPUnit ≥ 12, so the bundle must also be ≥ 5.9)Full Changelog: https://github.com/goaop/parser-reflection/compare/4.0.0...5.0.0
Known follow-ups (out of this release's scope): #233, #234, #235, and possibly mirroring the new 8.6 getDefaultValue() deprecation in the parsed implementation.
Full Changelog: https://github.com/goaop/parser-reflection/compare/3.0.1...3.1.0
This patch release fixes compatibility with PHP7.3 and PHP7.4 #103
Warning! Please, be aware that this repo is not maintained well and will be abandoned soon. Consider to upgrade your software to the Roave/BetterReflection library.
This minor release contains several fixes and improvements:
ReflectionClassConstant #93, #97 (by @MaximilianKresse)ReflectionMethod->getClosure($object = null) compatibility #88 (by @ddinchev)getNamespaceAliases() logic fix #96 (by @MaximilianKresse)Small patch release for #89
This release enables usage of token positions during analysis in Go! AOP framework, see #78. Also contains improvements by @loren-osborn in #76
Patch version with small fixes:
PHP version was also bumped to be >=5.6.0. Pay an attention if you use this library with outdated PHP versions.
This release contains a lot of fixes and improvements since 1.1.0:
This release also provides support for parsing PHP7.1 files. However, ReflectionClassConstant and constants with modifiers are not supported yet.
Minor release, that contains several features and important bug-fixes:
ReflectionClass::hasConstant methodPatch release for #8
Patch release for fixing #5
This is first working version of ParserReflection :registered: library with almost compatible Reflection API. Enjoy!
First working version of ReflectionEngine with full emulation of original Reflection classes.
How can I help you explore Laravel packages today?