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分页显示制作详细讲解
Dec 05 PHP
php引用地址改变变量值的问题
Mar 23 PHP
php 生成唯一id的几种解决方法
Mar 08 PHP
PHPMailer的主要功能特点和简单使用说明
Feb 17 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
PHP Cookie学习笔记
Aug 23 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 PHP
php中引用&的用法分析【变量引用,函数引用,对象引用】
Dec 12 PHP
Swoole实现异步投递task任务案例详解
Apr 02 PHP
PHP7生产环境队列Beanstalkd用法详解
May 19 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教程 基本语法
2009/10/23 PHP
php数据库连接时容易出错的特殊符号问题
2010/09/01 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
2012/06/13 PHP
php 基础函数
2017/02/10 PHP
javascript AutoScroller 函数类
2009/05/29 Javascript
jQuery使用一个按钮控制图片的伸缩实现思路
2013/04/19 Javascript
jquery实现手风琴效果实例代码
2013/11/15 Javascript
javascript 获取网页标题代码实例
2014/01/22 Javascript
js 获取、清空input type="file"的值示例代码
2014/02/19 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
基于javascript实现图片滑动效果
2016/05/07 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
利用js获取下拉框中所选的值
2016/12/01 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
JavaScript 程序错误Cannot use 'in' operator to search的解决方法
2017/07/10 Javascript
js对象实例详解(JavaScript对象深度剖析,深度理解js对象)
2017/09/21 Javascript
vue2 前端搜索实现示例
2018/02/26 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
layui问题之模拟select点击事件的实例讲解
2018/08/15 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Vue如何将页面导出成PDF文件
2020/08/17 Javascript
用python写asp详细讲解
2013/12/16 Python
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python使用pandas对数据进行差分运算的方法
2018/12/22 Python
python爬虫 爬取58同城上所有城市的租房信息详解
2019/07/30 Python
django 实现简单的插入视频
2020/04/07 Python
常用的10个Python实用小技巧
2020/08/10 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
猎人靴英国官网:Hunter Boots
2017/02/02 全球购物
上班迟到检讨书范文
2015/05/06 职场文书
使用tensorflow 实现反向传播求导
2021/05/26 Python
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL