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 相关文章推荐
Win2003服务器安全加固设置--进一步提高服务器安全性
May 23 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
js下函数般调用正则的方法附代码
Jun 22 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
php获取访问者IP地址汇总
Apr 24 PHP
php操作redis缓存方法分享
Jun 03 PHP
php实现将Session写入数据库
Jul 26 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
php JWT在web端中的使用方法教程
Sep 06 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
Oct 12 PHP
PHP实现倒计时功能
Nov 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下载远程文件类(支持断点续传)
2008/11/14 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
2013/04/23 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
php生成curl命令行的方法
2015/12/14 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
Laravel框架自定义分页样式操作示例
2020/01/26 PHP
JAVASCRIPT IE 与 FF中兼容问题小结
2009/02/18 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
javascript实现方法调用与方法触发小结
2016/03/26 Javascript
Bootstrap3.0建站教程(一)之bootstrap表单元素排版
2016/06/01 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
Jquery实现遮罩层的简单实例(就是弹出DIV周围都灰色不能操作)
2016/07/14 Javascript
微信小程序 欢迎界面开发的实例详解
2016/11/30 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
在使用JSON格式处理数据时应该注意的问题小结
2017/05/20 Javascript
jQuery+ajax实现修改密码验证功能实例详解
2017/07/06 jQuery
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
vuejs element table 表格添加行,修改,单独删除行,批量删除行操作
2020/07/18 Javascript
vue element-ui中table合计指定列求和实例
2020/11/02 Javascript
浅谈es6中的元编程
2020/12/01 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
Python聚类算法之凝聚层次聚类实例分析
2015/11/20 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
用Pytorch训练CNN(数据集MNIST,使用GPU的方法)
2019/08/19 Python
css3中background新增的4个新的相关属性用法介绍
2013/09/26 HTML / CSS
解释一下钝化(Swap out)
2016/12/26 面试题
高二学生评语大全
2014/04/25 职场文书
活动总结怎么写
2014/04/28 职场文书
商务英语专业大学生职业生涯规划书
2014/09/14 职场文书
教师学习三严三实心得体会
2014/10/13 职场文书
道路交通事故赔偿协议书
2014/10/24 职场文书
2016年元旦致辞
2015/08/01 职场文书
go类型转换及与C的类型转换方式
2021/05/05 Golang
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
基于Python实现对比Exce的工具
2022/04/07 Python
原生JS实现分页
2022/04/19 Javascript