PHP经典设计模式之依赖注入定义与用法详解


Posted in PHP onMay 21, 2019

本文实例讲述了PHP经典设计模式之依赖注入定义与用法。分享给大家供大家参考,具体如下:

依赖注入的实质就是把一个类不可能更换的部分可更换的部分分离开来,通过注入的方式来使用,从而达到解耦的目的。

一个数据库连接类:

class Mysql{
 private $host;
 private $prot;
 private $username;
 private $password;
 private $db_name;
 // 构造方法
 public function __construct(){
   $this->host = '127.0.0.1';
   $this->port = 22;
   $this->username = 'root';
   $this->password = '';
   $this->db_name = 'my_db';
 }
 // 连接
 public function connect(){
   return mysqli_connect($this->host,$this->username,$this->password,$this->db_name,$this->port);
 }
}

使用这个类:

$db = new Mysql();
$db->connect();

通常数据库连接类应该设计为单列,这里先不要搞复杂了。

依赖注入

显然,数据库的配置是可以更换的部分,因此我们需要先把它拎出来:

class MysqlConfiguration{
  private $host;
  private $prot;
  private $username;
  private $password;
  private $db_name;
  public function __construct($host,$port,$username,$password,$db_name){
    $this->host = $host;
    $this->port = $port;
    $this->username = $username;
    $this->password = $password;
    $this->db_name = $db_name;
  }
  public function getHost(){
    return $this->host;
  }
  public function getPort(){
    return $this->port();
  }
  public function getUsername(){
    return $this->username;
  }
  public function getPassword(){
    return $this->password;
  }
  public function getDbName(){
    return $this->db_name;
  }
}

然后不可替换的部分这样:

class Mysql{
 private $configuration;
 public function __construct($config){
   $this->configuration = $config;
 }
 // 连接
 public function connect(){
   return mysqli_connect($this->configuration->getHost(),$this->configuration->getUsername(),$this->configuration->getPassword(),$this->configuration->getDbName(),$this->configuration->getPort());
 }
}

这样就完成了配置文件和连接逻辑的分离。

使用

$config = new MysqlConfiguration('127.0.0.1','root','password','my_db',22);
// $config是注入Mysql的,这就是所谓的依赖注入
$db = new Mysql($config);
$db->connect();

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP校验ISBN码的函数代码
Jan 17 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
Jul 04 PHP
解析PHP将对象转换成数组的方法(兼容多维数组类型)
Jun 21 PHP
PHP中对缓冲区的控制实现代码
Sep 29 PHP
php数组合并array_merge()函数使用注意事项
Jun 19 PHP
成为好程序员必须避免的5个坏习惯
Jul 04 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
PHP也能干大事之PHP中的编码解码详解
Apr 20 PHP
PHP进行批量任务处理不超时的解决方法
Jul 11 PHP
thinkPHP js文件中U方法不被解析问题的解决方法
Dec 05 PHP
针对thinkPHP5框架存储过程bug重写的存储过程扩展类完整实例
Jun 16 PHP
PHP常见过waf webshell以及最简单的检测方法
May 21 #PHP
PHP __call()方法实现委托示例
May 20 #PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
May 20 #PHP
PHP常量define和const的区别详解
May 18 #PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 #PHP
java解析json方法总结
May 16 #PHP
微信支付之JSAPI公众号支付详解
May 15 #PHP
You might like
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
js打印纸函数代码(递归)
2010/06/18 Javascript
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
jquery判断至少有一个checkbox被选中的方法
2015/06/05 Javascript
jquery获取form表单input元素值的简单实例
2016/05/30 Javascript
AngularJS中$http服务常用的应用及参数
2016/08/22 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
2016/12/19 Javascript
vue的Virtual Dom实现snabbdom解密
2017/05/03 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
Vue如何实现响应式系统
2018/07/11 Javascript
微信小程序之判断页面滚动方向的示例代码
2018/08/30 Javascript
详解iview的checkbox多选框全选时校验问题
2019/06/10 Javascript
JavaScript如何借用构造函数继承
2019/11/06 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python中sort和sorted函数代码解析
2018/01/25 Python
python中的for循环
2018/09/28 Python
python爬虫之自制英汉字典
2019/06/24 Python
详解Python用三种方式统计词频的方法
2019/07/29 Python
Pytorch 实现权重初始化
2019/12/31 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
HTML5本地存储和本地数据库实例详解
2017/09/05 HTML / CSS
Molly Bracken法国电子商店:法国女性时尚品牌
2019/07/24 全球购物
新闻专业本科生的自我评价分享
2013/11/20 职场文书
大学生毕业自我鉴定范文
2014/02/03 职场文书
自我鉴定书
2014/03/24 职场文书
党员个人总结范文
2015/02/14 职场文书
2015年服务员工作总结
2015/04/08 职场文书
综治目标管理责任书
2015/05/11 职场文书
专项资金申请报告
2015/05/15 职场文书
2016计划生育先进个人事迹材料
2016/02/29 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
MySQL如何构建数据表索引
2021/05/13 MySQL