fsi/reflection

该包已被弃用且不再维护。未建议替代包。
该包最新版本(0.9.2)的许可证信息不可用。

FSi Reflection 组件是 PHP 5.3 内置反射类的扩展,通过工厂设计模式节省大量内存。

0.9.2 2012-10-03 08:02 UTC

This package is auto-updated.

Last update: 2022-01-25 14:37:25 UTC


README

FSi Reflection 组件是 PHP 5.3 内置反射类的扩展。部分方法被重写,使得反射对象被缓存,同一个类/方法/属性/函数或扩展不会创建两次。这是通过使用工厂模式实现的。一些无法重写以使用此类缓存的方法将抛出异常。从该库返回的所有 ReflectionProperty 和 ReflectionMethod 对象都预先设置为可访问的,即使它们是私有或受保护的,也可以使用。

设置和自动加载

我们强烈推荐使用 composer.phar 生成的自动加载器

将反射添加到 composer.json 中

{
    ... 
    "require": {
        ... 
        "fsi/reflection": "0.9.*" 
        ...
    },
    ...
}

使用示例

使用此反射库的关键思想不是通过构造函数构造反射类,而是通过添加到每个反射类的 factory() 方法。假设我们有一个名为 ClassA 的类

<?php
class ClassA
{
    private $privateProperty;

    protected $protectedProperty;

    public $publicProperty;

    public function __construct($constructorParam)
    {

    }

    private function privateMethod($paramA, $paramB)
    {
        return $paramA . '-' .$paramB;
    }

    protected function protectedMethod($paramC, $paramD)
    {
        return $paramC . '+' .$paramD;
    }

    public function publicMethod($paramE, $paramF)
    {
        return $paramE . '=' .$paramF;
    }
}

为了创建反射对象,您可以

<?php
use FSi\Reflection\ReflectionClass;
use FSi\Reflection\ReflectionProperty;
use FSi\Reflection\ReflectionMethod;

$reflectionClassA = ReflectionClass::factory('ClassA');
$reflectionPropertyPrivate = $reflectionClassA->getProperty('privateProperty');
$reflectionPropertyPrivate = ReflectionProperty::factory('ClassA', 'privateProperty');
$reflectionMethodPrivate = $reflectionClassA->getMethod('privateMethod');
$reflectionMethodPrivate = ReflectionMethod::factory('ClassA', 'privateMethod');

您必须记住,直接在代码中使用任何反射类的构造函数将抛出异常。