php反射学习之依赖注入示例
程序员文章站
2022-11-14 16:11:31
本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下:
先看代码:
本文实例讲述了php反射学习之依赖注入。分享给大家供大家参考,具体如下:
先看代码:
<?php if (php_sapi != 'cli') { exit('please run it in terminal!'); } if ($argc < 3) { exit('at least 2 arguments needed!'); } $controller = ucfirst($argv[1]) . 'controller'; $action = 'action' . ucfirst($argv[2]); // 检查类是否存在 if (!class_exists($controller)) { exit("class $controller does not existed!"); } // 获取类的反射 $reflector = new reflectionclass($controller); // 检查方法是否存在 if (!$reflector->hasmethod($action)) { exit("method $action does not existed!"); } // 取类的构造函数 $constructor = $reflector->getconstructor(); // 取构造函数的参数 $parameters = $constructor->getparameters(); // 遍历参数 foreach ($parameters as $key => $parameter) { // 获取参数声明的类 $injector = new reflectionclass($parameter->getclass()->name); // 实例化参数声明类并填入参数列表 $parameters[$key] = $injector->newinstance(); } // 使用参数列表实例 controller 类 $instance = $reflector->newinstanceargs($parameters); // 执行 $instance->$action(); class hellocontroller { private $model; public function __construct(testmodel $model) { $this->model = $model; } public function actionworld() { echo $this->model->property, php_eol; } } class testmodel { public $property = 'property'; }
(以上代码非原创)将以上代码保存为 run.php
运行方式,在终端下执行php run.php hello world
可以看到,我们要执行 hellocontroller 下的 worldaction,
hellocontroller 的构造函数需要一个 testmodel类型的对象,
通过php 反射,我们实现了, testmodel 对象的自动注入,
上面的例子类似于一个请求分发的过程,是路由请求的分发的一部分,假如我们要接收一个请求 地址例如: /hello/world
意思是要执行 hellocontroller 下的 worldaction 方法。
更多关于php相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《php数组(array)操作技巧大全》、《php基本语法入门教程》、《php运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。
上一篇: 有道云笔记和印象笔记哪个好用些
下一篇: PHP进阶学习之反射基本概念与用法分析