ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 依赖注入 框架提供了方便的依赖注入机制,可大大减少代码量提高开发效率,依赖注入使用了系统的 App 服务完成,系统中的控制器方法、路由闭包等均在依赖注入控制范围内。 [TOC] ### 控制器 控制器中的方法是系统(路由)调用的,我们可以在控制器的参数设置类型修饰,系统会自动分析而 进行注入。 ~~~ <?php namespace app\index\controller; use hepps\reqrest\Request; class Entry { public function index( Request $r ) { //系统会自动注入 Request对象 至$r变量 } } ~~~ 不过由于框架所提供的类均可以实现静态调用,所以以上方法所注入到的不是该类真正的实例,如果想要注入到真正的实例修改命名空间在类前面加上build 如: ~~~ <?php namespace app\index\controller; use hepps\reqrest\build\Request; class Entry { public function index( Request $r ) { //系统会自动注入 Request对象 至$r变量 } } ~~~ 也可以调用容器提供的方法来自己实现依赖注入 ~~~ /** * 反射自动依赖注入执行一个函数 * @param [type] $func [函数名或者闭包函数] * @param [type] $args [参数 可以不提供] * @return [type] [description] */ public function invokeFunction($func, $args = []) 调用方法 App::invokeFunction($func, $args = []); ~~~ ~~~ /** * 自动依赖注入执行一个类方法 * @param [type] $class [对象或者类名] * @param [type] $method [需要执行的方法] * @param [type] $args [参数 可以不提供] * @return [type] [description] */ public function invokeMethod($class, $method, $args = []) 调用方法 App::invokeMethod($class, $method, $args = []); ~~~ ## 方法介绍 #### 执行一个闭包函数 ~~~ $func = function($str = 'hello world') { echo $str; }; App::invokeFunction($func); ~~~ 输出 `hello world` #### 传入参数 ~~~ $func = function($str = 'hello world') { echo $str; }; App::invokeFunction($func, ['str'=> 'hello']); ~~~ 输出`hello` #### 执行一个类方法 ~~~ App::invokeMethod('\hepps\config\build\Base', 'get', ['name'=>'app.app_path']); ~~~ 输出app下面app_path的值 第一个参数传入类名称或者类对象都可以