Download the PHP package sun/staticreflection without Composer
On this page you can find all versions of the php package sun/staticreflection. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download sun/staticreflection
More information about sun/staticreflection
Files in sun/staticreflection
Package staticreflection
Short Description Static PHP class code reflection for post-discovery scenarios.
License MIT
Informations about the package staticreflection
StaticReflection

Static PHP class code reflection for post-discovery scenarios.
This utility library for PHP frameworks allows to reflect the file header of a PHP class without loading its code into memory, if its filesystem location is known already (e.g., via discovery/classmap).
Static reflection is useful to filter a large list of previously discovered class files for common aspects like interfaces or base classes.
ReflectionClass
provides the same API as the native \ReflectionClass
.
Native PHP Reflection can easily grow out of control, because it not only loads the reflected class, but also all dependent classes and interfaces. PHP code cannot be unloaded. A high memory consumption may cause the application to exceed PHP's memory limit. — Static reflection avoids to (auto-)load all dependencies and ancestor classes of each reflected class into memory.
In the worst/ideal use-case, you're only generating a list of available classes, without using them immediately (e.g., for user selection or swappable plugin implementations).
Example xhprof diff result:
1,538 candidate classes, of which 180 interfaces, traits, abstract and other helper classes are filtered out:
\ReflectionClass | ReflectionClass | Diff | Diff% | |
---|---|---|---|---|
Number of Function Calls | 64,747 | 202,783 | 138,036 | 213.2% |
Incl. Wall Time (microsecs) | 2,514,801 | 3,272,539 | 757,738 | 30.1% |
Incl. CPU (microsecs) | 2,480,415 | 3,120,020 | 639,605 | 25.8% |
Incl. MemUse (bytes) | 108,805,120 | 10,226,160 | -98,578,960 | -90.6% |
Incl. PeakMemUse (bytes) | 108,927,216 | 10,347,608 | -98,579,608 | -90.5% |
Usage Example
-
Prerequisite: Some discovery produces a classmap:
→ You have a
classname => pathname
map. -
Filter all discovered class files:
→ You filtered the list of available classes, without loading all code into memory.
-
Why this matters:
→ Only the ancestors of each class/interface were loaded. The statically reflected classes themselves did not get loaded.
-
ProTip™ -
ReflectionClass::isSubclassOfAny()
To filter for a set of common parent classes/interfaces, check the statically reflected information first. Only proceed to
isSubclassOf()
in case you need to check further; e.g.:
Requirements
- PHP 5.4.2+
Limitations
-
Only one class/interface/trait per file (PSR-2, PSR-0/PSR-4), which must be defined first in the file.
-
implementsInterface($interface)
returnsTRUE
even if$interface
is a class. -
\ReflectionClass::IS_IMPLICIT_ABSTRACT
is not supported, since methods are not analyzed. (only the file header is analyzed) -
\ReflectionClass::$name
is read-only and thus not available. UsegetName()
instead. -
Calling any other
\ReflectionClass
methods that are not implemented (yet) causes a fatal error.The parent
\ReflectionClass
class might be lazily instantiated on-demand in the future (PRs welcome).ReflectionClass
does implement all methods that can be technically supported already.
Notes
- StaticReflection may work around bytecode caches that strip off comments.
Inspirations
Static/Reflection:
- Doctrine's (Static) Reflection
- phpDocumentor's Reflection
- Zend Framework's Reflection
PHPDoc tags/annotations:
- PHPUnit's Util\Test
- Doctrine's Annotations
- phpDocumentor's ReflectionDocBlock + Descriptor
- Kuria's PhpDocComment
- Philip Graham's Annotations
License
MIT — Copyright (c) 2014 Daniel F. Kudwien (sun)
All versions of staticreflection with dependencies
ext-tokenizer Version *
ext-reflection Version *