lanfix/goaop-parser-reflection
Composer 安装命令:
composer require lanfix/goaop-parser-reflection
包简介
Provides reflection information, based on raw source
README 文档
README
This library is deprecated. Please use BetterReflection.
Parser Reflection API library provides a set of classes that extend original internal Reflection classes, but powered by PHP-Parser library thus allowing to create a reflection instance without loading classes into the memory.
This library can be used for analysing the source code; for automatic proxy creation and much more.
Installation
Library can be installed with Composer. Installation is quite easy:
$ composer require goaop/parser-reflection
Composer will install the library to your project's vendor/goaop/parser-reflection directory.
Usage
Initialization
Prior to the first use library can be optionally initialized. If you use Composer for installing packages and loading classes, then you shouldn't worry about initialization, library will be initialized automatically.
If project uses a custom autoloader then you should follow the next steps:
- Create a new class that implements
\Go\ParserReflection\LocatorInterface - Create an instance of that class and pass it to the
ReflectionEngine::init()method for initial configuration
Reflecting concrete classes/methods/properties without loading them
Just use Go\ParserReflection package reflection classes like traditional ones:
$parsedClass = new \Go\ParserReflection\ReflectionClass(SomeClass::class); var_dump($parsedClass->getMethods()); $parsedMethod = new \Go\ParserReflection\ReflectionMethod(SomeClass::class, 'someMethod'); echo (string)$parsedMethod;
Or you can use an additional classes ReflectionFile and ReflectionFileNamespace to analyse a raw PHP files:
$parsedFile = new \Go\ParserReflection\ReflectionFile('SomeClass.php'); $fileNameSpaces = $parsedFile->getFileNamespaces(); // We can iterate over namespaces in the file foreach ($fileNameSpaces as $namespace) { $classes = $namespace->getClasses(); // Iterate over the classes in the namespace foreach ($classes as $class) { echo "Found class: ", $class->getName(), PHP_EOL; // Now let's show all methods in the class foreach ($class->getMethods() as $method) { echo "Found class method: ", $class->getName(), '::', $method->getName(), PHP_EOL; } // ...all properties in the class foreach ($class->getProperties() as $property) { echo "Found class property: ", $class->getName(), '->', $property->getName(), PHP_EOL; } } }
How it works?
To understand how library works let's look at what happens during the call to the new \Go\ParserReflection\ReflectionClass(SomeClass::class)
\Go\ParserReflection\ReflectionClassasks reflection engine to give an AST node for the given class name- Reflection engine asks a locator to locate a filename for the given class
ComposerLocatorinstance asks the Composer to find a filename for the given class and returns this result back to the reflection engine- Reflection engine loads the content of file and passes it to the PHP-Parser for tokenization and processing
- PHP-Parser returns an AST (Abstract Syntax Tree)
- Reflection engine then analyse this AST to extract specific nodes and wrap them into corresponding reflection classes.
Compatibility
All parser reflection classes extend PHP internal reflection classes, this means that you can use \Go\ParserReflection\ReflectionClass instance in any place that asks for \ReflectionClass instance. All reflection methods should be compatible with original ones, providing an except methods that requires object manipulation, such as invoke(), invokeArgs(), setAccessible(), etc. These methods will trigger the process of class loading and switching to the internal reflection.
lanfix/goaop-parser-reflection 适用场景与选型建议
lanfix/goaop-parser-reflection 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 236.54k 次下载、GitHub Stars 达 0, 最近一次更新时间为 2021 年 05 月 28 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 lanfix/goaop-parser-reflection 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 lanfix/goaop-parser-reflection 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 236.54k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 22
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2021-05-28