Blogger Information
Blog 94
fans 0
comment 0
visits 92647
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
依赖注入和容器绑定
可乐随笔
Original
1310 people have browsed it

依赖注入和容器绑定

1.容器与依赖注入的原理


  • 1.任何的URL访问,最终都是定位到控制器的,由控制器中某个具体的方法去执行。
  • 2.一个控制器对应一个类,如果这些类需要进行统一管理,怎么办?
  • 容器来进行类管理,还可以将类的实例作为参数,传递给类方法,自动触发依赖注入
  • 依赖注入:将对象类型的数据,以参数的方法传到方法的参数列表
  • URL访问:通过get方式将数据传到控制器指定的方法中,但是只能传:字符串/数值
  • 如果要传一个对象到当前方法中?怎么办?
  • 依赖注入:解决了向类中方法传对象的问题
  1. <?php
  2. namespace app\index\controller;
  3. class Demo1
  4. {
  5. //可以通过字符串/数值用get方法来传值到类方法中
  6. public function getName($name = 'MHR')
  7. {
  8. return 'Hello '.$name;
  9. }
  10. // 依赖注入
  11. // \app\common\Temp $Temp:将会触发依赖注入
  12. // 会自动实例化化类,依赖注入就是将对象传入方法的手段
  13. public function getMathod(\app\common\Temp $temp)
  14. {
  15. //getMathod中的 `\app\common\Temp $temp` 等价于:
  16. //$temp = new \app\common\Temp;
  17. $temp->setName('MRH');
  18. return $temp->getName();
  19. }
  20. }

2.绑定一个类到容器

  1. //绑定一个类到容器
  2. public function bindClass()
  3. {
  4. // //使用容器(Container)类的set方法,把一个类放到容器中:相当于注册到容器中。
  5. // \think\Container::set('temp','\app\common\Temp');
  6. // //将容器中的类实例化并取出来使用:实例化时可调用构造器进行初始化
  7. // $temp = \think\Container::get('temp',['name'=>'Mahairen']);
  8. //使用助手函数,和上面的容器绑定方法作用一样
  9. bind('temp','\app\common\Temp');
  10. $temp = app('temp',['name'=>'PHP中文网']);
  11. return $temp->getName();
  12. }

2.绑定一个闭包到容器

  1. //绑定一个闭包到容器:
  2. public function bindClosure()
  3. {
  4. //使用容器(Container)类的set方法,把一个闭包放到容器中。
  5. \think\Container::set('demo',function ($domain){
  6. return 'php中文网的域名是:'.$domain;
  7. });
  8. //将容器中的闭包取出来使用
  9. return \think\Container::get('demo',['domain'=>'www.php.cn']);
  10. }

Temp类:需要被注入的类

  1. <?php
  2. namespace app\common;
  3. class Temp
  4. {
  5. private $name;
  6. public function __construct($name = 'mhr')
  7. {
  8. $this->name = $name;
  9. }
  10. public function setName($name)
  11. {
  12. $this->name = $name;
  13. }
  14. public function getName()
  15. {
  16. return '方法是:' .__METHOD__ . '属性是:'. $this->name;
  17. }
  18. }
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post