php反射实现之依赖注入

  介绍

这篇文章将为大家详细讲解有关php反射实现之依赖注入,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

& lt; php ?   if  (PHP_SAPI  !=, & # 39; cli # 39;), {   退出才能(& # 39;Please  run  it 拷贝终端! & # 39;);   }   if  (argc 美元;& lt;, 3), {   退出才能(& # 39;At  least  2, arguments 需要! & # 39;);   }   $ controller =, ucfirst ($ argv[1]),只& # 39;控制器# 39;;   时间=美元action  & # 39;行动# 39;,只ucfirst ($ argv [2]);//,检查类是否存在   if  (! class_exists(控制器)美元),{   退出才能(“Class  controller 美元;does  not 存在!“);   }//,获取类的反射   $ reflector =, new  ReflectionClass($控制器);//,检查方法是否存在   if (! $反射器→hasMethod(动作)美元),{   退出才能(“Method  action 美元;does  not 存在!“);   }//,取类的构造函数   美元$ constructor =,反射器→getConstructor ();//,取构造函数的参数   美元$ parameters =,构造函数→getparameter ();//,遍历参数   foreach  (parameters 美元;as  key 美元;=祝辞,美元参数),{//,才能获取参数声明的类   时间=美元才能injector  new  ReflectionClass(参数→美元getClass()→名称);//,才能实例化参数声明类并填入参数列表   美元才能参数[$ key],=,注射器→美元newInstance ();   }//,使用参数列表实例,controller 类   美元$ instance =,反射器→newInstanceArgs(参数);//,执行   实例→行动美元();   class  HelloController   {   美元private 才能;模型;   public 才能;function  __construct (TestModel  $模型)   {才能   ,,,这个→美元model =,美元模型;   ,,}   public 才能;function  actionWorld ()   {才能   ,,,echo  $ this→模型→属性,,PHP_EOL;   ,,}   }   class  TestModel   {   public 才能;property 美元;=,& # 39;财产# 39;;   }

(以上代码非原创)将以上代码保存为运行。php

运行方式,在终端下执行<代码> php运行。php Hello World

可以看的到,我们要执行HelloController下的WorldAction,
HelloController的构造函数需要一个TestModel类型的对象,

通过php反射,我们实现了,TestModel对象的自动注入,

上面的例子类似于一个请求分发的过程,是路由请求的分发的一部分,假如我们要接收一个请求地址例如:世界/Hello/

意思是要执行HelloController下的WorldAction方法。

关于php反射实现之依赖注入就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。

php反射实现之依赖注入