php反射机制理解,并实现类方法依赖注入和控制反转

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作为参数传入反射类
$demo = new \ReflectionClass(Demo::class); 
//获取类的实例
$instance = $demo->newInstance();
//获取构造方法
$constructor = $demo->getConstructor();
//获取构造方法的所有参数
$parameter = $demo->getConstructor()->getParameters();
// 获取所有属性,返回ReflectionProperty的数组
$properties = $demo->getProperties();
// 获取name属性ReflectionProperty
$property = $demo->getProperty('name');
// 获取所有方法
$methods = $demo->getMethods();
//获取指定方法的所有参数
$method_parameters = $demo->getMethod('setName')->getParameters(); 
// 获取类的命名空间
$namespace = $demo->getNamespaceName(); 
 // 获取注释文档,即定义在类之前的注释
$comment_class = $demo->getDocComment();
// 获取类中getName方法的注释文档
$comment_method = $demo->getMethod('getName')->getDocComment();  

通过反射机制实现类方法依赖注入

//新建一个注入的类
class Inject
{
	public function funs()
    {
        echo '注入成功';
    }
}

//获取demo反射实例
$demo = new \ReflectionClass(Demo::class); 
//获取待注入di方法的所有参数,循环注入
$param = $demo->getMethod('di')->getParameters();
//获取demo类实例
$instance = $demo->newInstance('zhangsan');
foreach ($param as $v){
	//此方法是获取类方法参数的对象名称,如果没有对象参数会返回null
	$class = $v->getClass();
	if($class){
		$instance->di($class->newInstance());
	}
}
//最后执行输出 ‘注入成功’ 字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值