fsi / reflection
该包已被弃用且不再维护。未建议替代包。
该包最新版本(0.9.2)的许可证信息不可用。
FSi Reflection 组件是 PHP 5.3 内置反射类的扩展,通过工厂设计模式节省大量内存。
0.9.2
2012-10-03 08:02 UTC
Requires
- php: >=5.3.0
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');
您必须记住,直接在代码中使用任何反射类的构造函数将抛出异常。