scaleupstack / reflection
处理PHP反射的优化性能和便捷方式。
v1.2.1
2019-09-03 08:28 UTC
Requires
- php: >=7.2.0
- scaleupstack/assert: ^1.
Requires (Dev)
- phpunit/phpunit: ^7.
README
此库提供了一种性能提升且便捷的方式来处理PHP反射类。
-
性能: 如果连续实例化反射,那么反射会很慢。如果您在一个请求中频繁地依赖反射来检查相同类型的类,那么缓存创建的反射类将非常有帮助。
-
便捷性: 使用门面(facade)提供便捷的方法来代替处理反射类的对象图,以
- 检索PHP反射类,
- 获取/设置对象或类的静态和非静态属性,
- 调用对象或类的静态和非静态方法。
安装
使用 Composer 安装此库
$ composer require scaleupstack/reflection
用法
此包的公共API通过 ScaleUpStack\Reflection\Reflection
类提供。所有 Reflection
类的方法都是静态的。(实际上,无法实例化它。)
-
命名空间
use ScaleUpStack\Reflection\Reflection;
-
通过类名或对象检索PHP反射对象的方法
Reflection::classByName(string $className) : \ReflectionClass Reflection::classByObject(object $object) : \ReflectionClass Reflection::propertyOfClass(string $className, string $propertyName) : \ReflectionProperty Reflection::propertyOfObject(object $object, string $propertyName) : \ReflectionProperty Reflection::allPropertiesOfClass(string $className) : \ReflectionProperty[] Reflection::allPropertiesOfObject(object $object) : \ReflectionProperty[] Reflection::methodOfClass(string $className, string $methodName) : \ReflectionMethod Reflection::methodOfObject(object $object, string $methodName) : \ReflectionMethod Reflection::allMethodsOfClass(string $className) : \ReflectionMethod[] Reflection::allMethodsOfObject(object $object) : \ReflectionMethod[]
请注意,
classByObject()
返回一个\ReflectionClass
而不是一个\ReflectionObject
。 -
访问静态和非静态属性的方法
Reflection::getPropertyValue(object $object, string $propertyName) : mixed Reflection::getStaticPropertyValue(string $className, string $propertyName) : mixed Reflection::setPropertyValue(object $object, string $propertyName, $value) : void Reflection::setStaticPropertyValue(string $className, string $propertyName, $value) : void
-
调用静态和非静态方法的方法
Reflection::invokeMethod(object $object, string $methodName, array $arguments) : mixed Reflection::invokeStaticMethod(string $className, string $methodName, array $arguments) : mixed
当前状态
此库是稳定的。
一些反射特性(例如获取父类)的处理尚未实现,这些特性可能(也许)会从缓存中受益。但我并不追求完全性。如果您缺少某些功能,请创建一个pull请求或提出请求,并解释您的背景/需求。
贡献
感谢您想为ScaleUpStack/Reflection做出贡献。
许可证
请检查此包根目录下的 LICENSE.md。
版权
德国ScaleUpVentures Gmbh
Thomas Nunninger thomas.nunninger@scaleupventures.com
www.scaleupventures.com