🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
#### 操作方法注入 架构函数注入的话,需要给控制器定义相关的属性,而操作方法的注入则不需要给控制器类定义额外的属性,直接调用参数即可,缺点是只能在这个操作方法内部调用。 ~~~ <?php namespace app\index\controller; use think\Email; use think\Request; class Index { public function hello(Request $request, Email $email) { // 发送Hello邮件 // $email->sendMail($request->param('address'),'Hello'); return 'Hello,' . $request->param('name') . '!'; } } ~~~ 操作方法注入的效果就是使用`$request`参数替代之前的`Request::instance()`方法调用请求对象实例,用`$email`参数替代`new Email()`,代码更加简洁,并且很好的解决了代码的耦合问题。 操作方法的依赖注入原理和架构函数是一样的,对象的自动实例化规则也是相同,这一点就不再重复。 依赖注入不仅仅是控制器类,如果你的路由规则是路由到其它类或者控制器的方法,一样可以支持架构函数和方法的依赖注入。 依赖注入和参数绑定是可以共存的,不会相互影响,区别在于依赖注入是不需要通过URL传参的,而参数绑定是依赖URL传参,下面是一个同时使用依赖注入和参数绑定的例子: ~~~ <?php namespace app\index\controller; use think\Email; use think\Request; class Index { public function hello(Request $request, Email $email, $name = '', $address = '') { // 发送Hello邮件 // $email->sendMail($address,'Hello'); return 'Hello,' . $name . '!'; } } ~~~ 参数绑定和依赖注入的参数顺序对最终的方法没有影响。