scaleupstack/reflection

处理PHP反射的优化性能和便捷方式。

v1.2.1 2019-09-03 08:28 UTC

This package is auto-updated.

Last update: 2024-08-27 10:18:46 UTC


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