http://www.pchserch.com

                                                                  【快三购买app】php控制反转怎么实现的-PHP问题

                                                                  IoC,控制反转(Inversion of Control),依赖关系的转移,依赖抽象]而非实践

                                                                  DI,依赖注入(Dependency Injection),不必自己在代码中维护对象的依赖,容器自动根据配置,将依赖注入指定对象

                                                                  某地区有各种不同的商店,每家商店都卖四种水果:苹果十元一个、香蕉二十元一个、橘子三十元一个、西瓜四十元一个,顾客可以在任意商店进行购买,每家商店需要可以随时向税务局提供总销售额。(推荐学习:PHP编程从入门到精通)

                                                                  初步代码实现

                                                                  class Shop
                                                                  {
                                                                  // 商店的名字
                                                                  private $name;

                                                                  // 商店的总销售额
                                                                  private $turnover = 0;

                                                                  public function __construct($name){
                                                                  [ $this->name = $name;
                                                                  }

                                                                  // 售卖商品
                                                                  public function sell($commodity){
                                                                  switch ($commodity){
                                                                  case 'apple':
                                                                  $this->turnover += 10;
                                                                  echo "卖出一个苹果<br/>";
                                                                  break;
                                                                  case 'banana':
                                                                  $this->turnover += 20;
                                                                  echo "卖出一个香蕉<br/>";
                                                                  break;
                                                                  case 'orange':
                                                                  $this->turnover += 30;
                                                                  echo "卖出一个橘子<br/>";
                                                                  break;
                                                                  case 'watermelon':
                                                                  $this->turnover += 40;
                                                                  echo "卖出一个西瓜<br/>";
                                                                  break;
                                                                  }
                                                                  }
                                                                  // 显示商店目前的总销售额
                                                                  public function getTurnover(){
                                                                  echo $this->name.'目前为止的销售额为:'.$this->turnover;
                                                                  }
                                                                  }

                                                                  // 顾客类
                                                                  class Human
                                                                  {
                                                                  //从商店购买商品
                                                                  public function buy(Shop $shop,$commodity){
                                                                  $shop->sell($commodity);
                                                                  }
                                                                  }

                                                                  // new一个名为kfc的商店
                                                                  $kfc = new Shop('kfc');
                                                                  // new一个名为mike的顾客
                                                                  $mike = new Human();

                                                                  // mike从kfc买了一个苹果
                                                                  $mike->buy($kfc,'apple');
                                                                  // mike从k)fc买了一个香蕉
                                                                  $mike->buy($kfc,'banana');

                                                                  // 输出kfc的总营业额
                                                                  echo $kfc->getTurnover();

                                                                  可以看到,虽然代码完成了对目前需求的实现,但是此时的 shell() 方法依赖于具体的实践并且拥有绝对的控制权。一旦我们需要在商店加入一个新的商品,比如芒果mango,那我们不得不去修改商店类的 sell() 方法,违反了 OCP 原则,即对扩展开放,对修改关闭。

                                                                  此时我们可以修改代码如下

                                                                  abstract class Fruit
                                                                                  

                                                                  郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

                                                                  上一篇:拳头官方:英雄联盟全球十周年庆典即将到来,全新LOGO公布 - 英雄联盟
                                                                  下一篇:没有了