砖块/反射

用于扩展PHP反射能力的底层工具

0.5.4 2024-05-10 17:30 UTC

This package is auto-updated.

Last update: 2024-09-10 18:06:18 UTC


README

这是一个用于扩展PHP反射能力的底层工具集合。

Build Status Coverage Status Latest Stable Version Total Downloads License

安装

此库可通过 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