PHP 5 具有完整的反射 API,添加了对类、接口、函数、方法和扩展进行反向工程的能力。 此外,反射 API 提供了方法来取出函数、类和方法中的文档注释。
tp框架中反射的使用:
- ReflectionClass::__construct — 构造一个 ReflectionClass 类
public ReflectionClass::__construct ( mixed $argument )
- ReflectionClass::newInstanceArgs — 从给出的参数创建一个新的类实例,给出的参数将传递到类的构造函数。
public object ReflectionClass::newInstanceArgs ([ array $args ] )
- /thinkphp/library/think/Container.php
/**
* 调用反射执行类的实例化 支持依赖注入
* @access public
* @param string $class 类名
* @param array $vars 参数
* @return mixed
*/
public function invokeClass($class, $vars = [])
{
try {
$reflect = new ReflectionClass($class);
$constructor = $reflect->getConstructor();
//用于支持依赖的注入
$args = $constructor ? $this->bindParams($constructor, $vars) : [];
return $reflect->newInstanceArgs($args);
} catch (ReflectionException $e) {
throw new ClassNotFoundException('class not exists: ' . $class, $class);
}
}