zoukankan      html  css  js  c++  java
  • IOC容器

    php的依赖注入

    传统的思路是应用程序用到一个A类,就会创建A类并调用A类的方法,假如这个方法内需要一个B类,就会创建B类并调用B类的方法,而这个方法内需要一个C类,就会创建C类,接着做些其它工作。

     1 <?php
     2 class C
     3 {
     4     public function doSomething()
     5     {
     6         echo __METHOD__, '我是C类|';
     7     }
     8 }
     9 
    10 class B
    11 {
    12     public function doSomething()
    13     {
    14         $bim = new C();
    15         $bim->doSomething();
    16         echo __METHOD__, '我是B类|';
    17     }
    18 }
    19 
    20 class A
    21 {
    22     public function doSomething()
    23     {
    24         $bar = new B();
    25         $bar->doSomething();
    26         echo __METHOD__, '我是A类|';;
    27     }
    28 }
    29 
    30 $class = new A();
    31 $class->doSomething(); //C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|

    使用依赖注入的思路是应用程序用到A类,A类需要B类,B类需要C类,那么先创建C类,再创建B类并把C注入,再创建A类,并把B类注入,再调用A方法,A调用B方法,接着做些其它工作。

     1 <?php
     2 
     3 class C
     4 {
     5     public function doSomething()
     6     {
     7         echo __METHOD__, '我是C类|';
     8     }
     9 }
    10 
    11 class B
    12 {
    13     private $c;
    14 
    15     public function __construct(C $c)
    16     {
    17         $this->c = $c;
    18     }
    19 
    20     public function doSomething()
    21     {
    22         $this->c->doSomething();
    23         echo __METHOD__, '我是B类|';
    24     }
    25 }
    26 class A
    27 {
    28     private $b;
    29 
    30     public function __construct(B $b)
    31     {
    32         $this->b = $b;
    33     }
    34 
    35     public function doSomething()
    36     {
    37         $this->b->doSomething();
    38         echo __METHOD__, '我是A类|';;
    39     }
    40 }
    41 
    42 $class = new A(new B(new C()));
    43 $class->doSomething(); // C::doSomething我是C类|B::doSomething我是B类|A::doSomething我是A类|

    这就是控制反转模式。依赖关系的控制反转到调用链的起点。这样你可以完全控制依赖关系,通过调整不同的注入对象,来控制程序的行为。例如A类用到了memcache,可以在不修改A类代码的情况下,改用redis。

    使用依赖注入容器后的思路是应用程序需要到A类,就从容器内取得A类,容器创建C类,再创建B类并把C注入,再创建A类,并把B注入,应用程序调用A方法,A调用B方法,接着做些其它工作.

  • 相关阅读:
    学习笔记(4)---JQuery
    学习笔记---ES6
    angular.js的学习笔记(1)
    vue.js学习笔记(1)
    HTML5“爱心鱼”游戏总结
    学习笔记(3)---综合
    学习笔记(2)---CSS中的易混淆点
    学习笔记(1)----水平垂直居中的方法
    javascript:void(0)是什么意思
    private Int32? m_shopid;
  • 原文地址:https://www.cnblogs.com/BrokenHeart/p/10681356.html
Copyright © 2011-2022 走看看