PHP自5.0版本以后添加了反射机制,它提供了一套强大的反射API,允许你在PHP运行环境中,访问和使用类、方法、属性、参数和注释等,其功能十分强大,经常用于高扩展的PHP框架,自动加载插件,自动生成文档,甚至可以用来扩展PHP语言。由于它是PHP內建的oop扩展,为语言本身自带的特性,所以不需要额外添加扩展或者配置就可以使用。
以下是详细介绍,如何使用反射机制实现类方法的依赖注入
class Demo{
public $name= 'hua';
public function __construct($name)
{
$this->name= $name;
}
public function getName()
{
return $this->name;
}
public function setName($name)
{
$this->name= $name;
}
public function di(Inject $inject)
{
$inject->funs();
}
}
$demo = new \ReflectionClass(Demo::class);
$instance = $demo->newInstance();
$constructor = $demo->getConstructor();
$parameter = $demo->getConstructor()->getParameters();
$properties = $demo->getProperties();
$property = $demo->getProperty('name');
$methods = $demo->getMethods();
$method_parameters = $demo->getMethod('setName')->getParameters();
$namespace = $demo->getNamespaceName();
$comment_class = $demo->getDocComment();
$comment_method = $demo->getMethod('getName')->getDocComment();
通过反射机制实现类方法依赖注入
class Inject
{
public function funs()
{
echo '注入成功';
}
}
$demo = new \ReflectionClass(Demo::class);
$param = $demo->getMethod('di')->getParameters();
$instance = $demo->newInstance('zhangsan');
foreach ($param as $v){
$class = $v->getClass();
if($class){
$instance->di($class->newInstance());
}
}