砖块 / 反射
用于扩展PHP反射能力的底层工具
0.5.4
2024-05-10 17:30 UTC
Requires
- php: ^8.0
- brick/varexporter: ^0.3.7 || ^0.4.0 || ^0.5.0
- doctrine/annotations: ^1.10.4 || ^2.0
Requires (Dev)
- php-coveralls/php-coveralls: ^2.0
- phpunit/phpunit: ^9.0
- psalm/phar: 5.24.0
README
这是一个用于扩展PHP反射能力的底层工具集合。
安装
此库可通过 Composer 安装。
composer require brick/reflection
需求
此库需要PHP 8.0或更高版本。
项目状态与发布流程
此库仍在开发中。
当前版本编号为 0.x.y
。当引入非破坏性更改(添加新方法、优化现有代码等)时,y
将递增。
当引入破坏性更改时,总是从新的 0.x
版本周期开始。
因此,将项目锁定到给定的发布周期,例如 0.5.*
,是安全的。
如果您需要升级到较新的发布周期,请查看 发布历史,以了解每个后续 0.x.0
版本引入的更改列表。
文档
以下是该包中类的简要概述。
ReflectionTools
此类是PHP反射类工具的集合,用于提供额外功能。
只需创建一个 ReflectionTools
实例,就可以使用以下方法:
getClassMethods()
返回组成一个对象的非静态方法的反射,包括父类的私有方法。getClassProperties()
返回组成一个对象的非静态属性的反射,包括父类的私有属性。getClassHierarchy()
返回类层次结构,从第一个祖先开始,以类本身结束。getReflectionFunction()
为任何可调用对象返回一个反射对象。getFunctionName()
返回给定函数的有意义名称,包括如果是方法,则包括类名。exportFunctionSignature()
导出一个函数的签名,例如public function foo(string $bar): int
。
ImportResolver
ImportResolver 将类名解析为其完全限定名,考虑当前命名空间和PHP文件中使用的 use
语句。
这对于解析注解特别有用,例如 @param ClassName $foo
,其中 ClassName 的 FQCN 依赖于其出现的文件,例如
<?php namespace App; use Foo\Bar; use Foo\Bar\Baz as Alias; class Test { }
您可以通过传递属于PHP文件的任何反射对象作为上下文来创建解析器:一个 ReflectionClass
、一个 ReflectionClassConstant
、一个 ReflectionProperty
、一个 ReflectionMethod
或一个 ReflectionParameter
use Brick\Reflection\ImportResolver; $class = new ReflectionClass(App\Test::class); $resolver = new ImportResolver($class); echo $resolver->resolve('\Some\FQCN\Class'); // Some\FQCN\Class echo $resolver->resolve('Something'); // App\Something echo $resolver->resolve('Something\Else'); // App\Something\Else echo $resolver->resolve('Bar'); // Foo\Bar echo $resolver->resolve('Bar\tender'); // Foo\Bar\tender echo $resolver->resolve('Alias'); // Foo\Bar\Baz echo $resolver->resolve('Alias\ooka'); // Foo\Bar\Baz\ooka