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&mysql(二)
Oct 09 PHP
15种PHP Encoder的比较
Apr 17 PHP
有关php运算符的知识大全
Nov 03 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Jul 03 PHP
php实现把数组按指定的个数分隔
Feb 17 PHP
PHP中的替代语法简介
Aug 22 PHP
PHP获取文件扩展名的4种方法
Nov 24 PHP
CI框架中redis缓存相关操作文件示例代码
May 17 PHP
golang与PHP输出excel示例
Jul 22 PHP
PHP使用FFmpeg获取视频播放总时长与码率等信息
Sep 13 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 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创建session的方法实例详解
2015/01/27 PHP
脚本安需导入(装载)的三种模式的对比
2007/06/24 Javascript
Javascript 构造函数,公有,私有特权和静态成员定义方法
2009/11/30 Javascript
Jquery Ajax学习实例7 Ajax所有过程事件分析示例
2010/03/23 Javascript
js封装的textarea操作方法集合(兼容很好)
2010/11/16 Javascript
javascript学习笔记(五) Array 数组类型介绍
2012/06/19 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
走进javascript——不起眼的基础,值和分号
2017/02/24 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
浅谈原型对象的常用开发模式
2017/07/22 Javascript
vue父组件异步获取数据传给子组件的方法
2018/07/26 Javascript
Vue模板语法中数据绑定的实例代码
2019/05/17 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
python正则表达式去掉数字中的逗号(python正则匹配逗号)
2013/12/25 Python
python网络编程学习笔记(七):HTML和XHTML解析(HTMLParser、BeautifulSoup)
2014/06/09 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Django自定义manage命令实例代码
2018/02/11 Python
Python Requests库基本用法示例
2018/08/20 Python
python实现决策树分类
2018/08/30 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
python SocketServer源码深入解读
2019/09/17 Python
JetBrains PyCharm(Community版本)的下载、安装和初步使用图文教程详解
2020/03/19 Python
python框架flask入门之环境搭建及开启调试
2020/06/07 Python
Python类super()及私有属性原理解析
2020/06/15 Python
python和php哪个更适合写爬虫
2020/06/22 Python
编程输出如下图形
2013/11/24 面试题
高中毕业自我鉴定
2013/12/22 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
2015年保卫科工作总结
2015/05/14 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
详解CSS不受控制的position fixed
2021/05/25 HTML / CSS
Win10加载疑难解答时出错发生意外错误的解决方法
2022/07/07 数码科技