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 相关文章推荐
apache+mysql+php+ssl服务器之完全安装攻略
Sep 05 PHP
优化PHP程序的方法小结
Feb 23 PHP
基于PHP 面向对象之成员方法详解
May 04 PHP
使用openssl实现rsa非对称加密算法示例
Jan 24 PHP
微信公众平台天气预报功能开发
Jul 06 PHP
php目录遍历函数opendir用法实例
Nov 20 PHP
php防止网站被攻击的应急代码
Oct 21 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
PHP的PDO常用类库实例分析
Apr 07 PHP
jquery不支持toggle()高(新)版本的问题解决
Sep 24 PHP
PHP模拟http请求的方法详解
Nov 09 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 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
Windows下PHP5和Apache的安装与配置
2006/09/05 PHP
require(),include(),require_once()和include_once()区别
2008/03/27 PHP
swfupload 多文件上传实现代码
2008/08/27 PHP
Smarty日期时间操作方法示例
2016/11/15 PHP
checkbox 复选框不能为空
2009/07/11 Javascript
jQuery maxlength文本字数限制插件
2010/04/16 Javascript
HTML中的setCapture和releaseCapture使用介绍
2012/03/21 Javascript
js设置cookie过期当前时间减去一秒相当于立即过期
2014/09/04 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
jQuery图片渐变特效的简单实现
2016/06/25 Javascript
全面解析标签页的切换方式
2016/08/21 Javascript
玩转NODE.JS(四)-搭建简单的聊天室的代码
2016/11/11 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
Nodejs中Express 常用中间件 body-parser 实现解析
2017/05/22 NodeJs
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
JS轮播图实现简单代码
2021/02/19 Javascript
基于VUE.JS的移动端框架Mint UI的使用
2017/10/11 Javascript
使用vue点击li,获取当前点击li父辈元素的属性值方法
2018/09/12 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python实现连接两个无规则列表后删除重复元素并升序排序的方法
2018/02/05 Python
python奇偶行分开存储实现代码
2018/03/19 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
Laravel框架表单验证格式化输出的方法
2019/09/25 Python
宝拉珍选澳大利亚官方购物网站:Paula’s Choice澳大利亚
2016/09/13 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
英国绿色商店:Natural Collection
2019/05/03 全球购物
党员活动日总结
2014/05/05 职场文书
农村优秀教师事迹材料
2014/08/27 职场文书
英语辞职信怎么写
2015/02/28 职场文书
2015年学校德育工作总结
2015/04/22 职场文书
征求意见函
2015/06/05 职场文书