deviscoding / code-objects
PHP 代码对象和字符串管理库。
Requires
- php: >=7.0
- ext-json: *
- psr/container: ^1.0|^2.0
README
PHP 库,包含用于解决类名和调用符的类,以及操作代码构造字符串(如类名、方法名、CSS 类、HTML5 id、表名等)的类。
正在使用这个库吗?我很想听听你的意见!为仓库加星标,或在推文中提及 @jonesiscoding!
版本对象
设计了两个版本对象用于解析和比较语义版本号:`Version` 和 `VersionImmutable`。
构造对象
有三个主要的构造对象:`ConstructString`、`ClassString` 和 `MethodString`。`ClassString` 和 `MethodString` 都是 `ConstructString` 的扩展。
`ConstructString` 基类,用于处理任何编码构造的名称,如表、类、方法、键等。
更具体的 `ClassString` 和 `MethodString` 包含处理特定于方法名或类名的情况的额外方法,例如提取类名、命名空间、函数名等。
常用方法
解析器类
解析器类旨在允许解析 PHP 类和调用符。在开发过程中,大多数时间使用自动加载器和 PSR-0 或 PSR-4 结构可以防止需要解析类和调用符。
然而,在以下情况下这些类很有用:调用符在代码库外部配置,例如在 YAML 或 XML 配置文件或数据库中。在这些情况下,调用符和类通常使用键或 id 而不是完全限定类名来引用。
这些类在以下情况下也有用:有多个类可以使用,并且这些类存在于多个命名空间中。例如,一些实现特定接口的类属于你的代码库,但其他类可能属于供应商库。
每个类包含一个主要方法:`resolve`,它将解析提供的字符串、数组或对象。
类解析器
在实例化时,此类提供了一个命名空间或“同级”类(从中派生命名空间)。也可以提供一个命名空间或同级类的数组。
当调用 `resolve` 方法时,它通过匹配在实例化时提供给解析器的命名空间中的现有类,将提供的字符串解析为完全限定的类名。
实现解析器
此类与 `ClassResolver` 功能相同,但仅解析在实例化时给出的接口实现的类。
回调解析器
`CallbackResolver` 类在实例化时也提供了一个命名空间或“同级”类,并且也会接受一个命名空间或同级类的数组。
当调用 `resolve` 方法时,它将提供的字符串、数组或对象解析为 `Closure`,首先解析任何需要的类,实例化所需的对象(如果可能),验证请求的方法是可调用的,然后将调用符转换为 `Closure`。
要解析的项可以是以下任何格式
ClassName::methodString
(与非静态方法一起使用)\Fully\Qualified\ClassName::methodString
(与非静态方法一起使用)['ClassName', 'methodString']
['\Fully\Qualified\ClassName', 'methodString']
'InvokableClassName'
'\Fully\Qualified\InvokableClassName
这些也可以提供。尽管它们不需要解析,但它们将被验证为可调用的,并转换为 \Closure
。
可调用对象
- [Object, 'methodString']
ContainerAwareCallbackResolver
ContainerAwareCallbackResolver
必须在实例化时提供一个 PSR-11 容器接口,并在实例化时还可以提供可选的命名空间或“同级”类。该 ContainerInterface
对象用作依赖注入服务定位器,例如,Symfony 框架中使用的容器。
当调用 resolve
方法时,此解析器类型将尝试将任何项的 类 部分与 ContainerInterface
中的服务 id 进行匹配,然后继续解析回调的其余部分。
Closure
Closure
类是 PHP 7.1 的 \Closure::fromCallable
的超级增强替代品,并使用相同名称的方法工作。这个类不打算单独使用,而是为 CallbackResolver
做了“重活”,接受一个应该可调用的数组或字符串,将任何类实例化为对象(如果需要且可能),然后从结果可调用项创建闭包。
在 PHP 7.1+ 中,使用原始的 \Closure::fromCallable
进行最终步骤。在之前版本中,结果 \Closure
是“老式”方式创建的。