介绍
这篇文章将为大家详细讲解有关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反射实现之依赖注入就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看的到。