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开发大型项目的一点经验
Oct 09 PHP
PHP静态类
Nov 25 PHP
php 页面执行时间计算代码
Dec 04 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
国外十大最流行的PHP框架排名
Jul 04 PHP
php判断电脑访问、手机访问的例子
May 10 PHP
ThinkPHP框架设计及扩展详解
Nov 25 PHP
PHP判断是否为空的几个函数对比
Apr 21 PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 PHP
Yii使用smsto短信接口的函数demo示例
Jul 13 PHP
PHP实现简单计算器小程序
Aug 28 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
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
PHP正则验证Email的方法
2015/06/15 PHP
如何在PHP中读写文件
2020/09/07 PHP
跨浏览器的设置innerHTML方法
2006/09/18 Javascript
jQuery实现table隔行换色和鼠标经过变色的两种方法
2014/06/15 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
jQuery动态创建html元素的常用方法汇总
2014/09/05 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
利用JS实现简单的日期选择插件
2017/01/23 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
利用Ionic2 + angular4实现一个地区选择组件
2017/07/27 Javascript
JavaScript EventEmitter 背后的秘密 完整版
2018/03/29 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
JavaScript函数式编程(Functional Programming)组合函数(Composition)用法分析
2019/05/22 Javascript
javascript浅层克隆、深度克隆对比及实例解析
2020/02/09 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
原生js实现轮播图特效
2020/05/04 Javascript
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python+matplotlib实现填充螺旋实例
2018/01/15 Python
python脚本生成caffe train_list.txt的方法
2018/04/27 Python
详解Python中的四种队列
2018/05/21 Python
Python面向对象编程基础实例分析
2020/01/17 Python
Python3.7安装PyQt5 运行配置Pycharm的详细教程
2020/10/15 Python
如何使用Django Admin管理后台导入CSV
2020/11/06 Python
Python爬虫分析微博热搜关键词的实现代码
2021/02/22 Python
有750多个顶级品牌的瑞士时尚在线:ABOUT YOU
2017/01/04 全球购物
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
班级聚会策划书
2014/01/16 职场文书
自考生自我评价分享
2014/01/18 职场文书
小学语文教学反思
2014/02/10 职场文书
财产分割协议书范本
2014/11/03 职场文书
会计专业求职信范文
2015/03/19 职场文书
公路施工安全责任书
2015/05/08 职场文书
初中开学典礼新闻稿
2015/07/17 职场文书
PYTHON InceptionV3模型的复现详解
2022/05/06 Python