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 相关文章推荐
php程序之die调试法 快速解决错误
Sep 17 PHP
php中json_encode中文编码问题分析
Sep 13 PHP
实测在class的function中include的文件中非php的global全局环境
Jul 15 PHP
php文件夹与文件目录操作函数介绍
Sep 09 PHP
php fsockopen解决办法 php实现多线程
Jan 20 PHP
2个比较经典的PHP加密解密函数分享
Jul 01 PHP
php实现webservice实例
Nov 06 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
php生成圆角图片的方法
Apr 07 PHP
PHP实现的自定义图像居中裁剪函数示例【测试可用】
Aug 11 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 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
20个PHP常用类库小结
2011/09/11 PHP
浅谈PDO的rowCount函数
2015/06/18 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
JavaScript入门教程(10) 认识其他对象
2009/01/31 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
深入理解JavaScript单体内置对象
2016/06/06 Javascript
JavaScript类的写法
2016/09/17 Javascript
Vue.js常用指令汇总(v-if、v-for等)
2016/11/03 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
深入浅析angular和vue还有jquery的区别
2018/08/13 jQuery
socket在egg中的使用实例代码详解
2019/05/30 Javascript
vue输入框使用模糊搜索功能的实现代码
2020/05/26 Javascript
JS如何监听div的resize事件详解
2020/12/03 Javascript
[53:23]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第二场 8.25
2018/08/29 DOTA
python使用scrapy解析js示例
2014/01/23 Python
Win7下搭建python开发环境图文教程(安装Python、pip、解释器)
2016/05/17 Python
Python爬虫:通过关键字爬取百度图片
2017/02/17 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python中zip()函数的解释和可视化(实例详解)
2020/02/16 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
python 无损批量压缩图片(支持保留图片信息)的示例
2020/09/22 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
洛杉矶生活休闲而精致的基础品牌:Mika Jaymes
2018/01/07 全球购物
安全检查管理制度
2014/02/02 职场文书
安全生产活动月方案
2014/03/09 职场文书
合作意向书模板
2014/03/31 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
2016新年慰问信范文
2015/03/25 职场文书
八年级作文之友情
2019/11/25 职场文书