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 相关文章推荐
解决控件遮挡问题:关于有窗口元素和无窗口元素
Jan 28 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
Oct 17 PHP
PHP实现的简单mock json脚本分享
Feb 10 PHP
从刷票了解获得客户端IP的方法
Sep 21 PHP
Yii+upload实现AJAX上传图片的方法
Jul 13 PHP
php+jQuery+Ajax简单实现页面异步刷新
Aug 08 PHP
php抽象方法和抽象类实例分析
Dec 07 PHP
PHP 年月日的三级联动实例代码
May 24 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
PHP的重载使用魔术方法代码实例详解
Feb 26 PHP
PHP使用Redis队列执行定时任务实例讲解
Mar 24 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
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
CI框架常用方法小结
2016/05/17 PHP
ThinkPHP 在阿里云上的nginx.config配置实例详解
2017/10/11 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
jQuery 遍历json数组的实现代码
2020/09/22 Javascript
confirm的用法示例用于按钮操作时确定是否执行
2014/06/19 Javascript
js确认框confirm()用法实例详解
2016/01/07 Javascript
微信小程序去哪里找 小程序到底如何使用(附小程序名单)
2017/01/09 Javascript
bootstrap fileinput 上传插件的基础使用
2017/02/17 Javascript
ES6中class类用法实例浅析
2017/04/06 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
Vue.js仿微信聊天窗口展示组件功能
2017/08/11 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
详解Vue中的scoped及穿透方法
2019/04/18 Javascript
Vue 列表上下过渡效果的实例代码
2019/06/25 Javascript
基于vue和websocket的多人在线聊天室
2020/02/01 Javascript
jQuery实现简单飞机大战
2020/07/05 jQuery
[01:05:56]Liquid vs VP Supermajor决赛 BO 第二场 6.10
2018/07/04 DOTA
[46:12]完美世界DOTA2联赛循环赛 DM vs Matador BO2第一场 11.04
2020/11/04 DOTA
Python读取网页内容的方法
2015/07/30 Python
Python利用Beautiful Soup模块修改内容方法示例
2017/03/27 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
Python实现冒泡排序的简单应用示例
2017/12/11 Python
使用python和pygame绘制繁花曲线的方法
2018/02/24 Python
Python之批量创建文件的实例讲解
2018/05/10 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
Django 限制用户访问频率的中间件的实现
2018/08/23 Python
python多任务及返回值的处理方法
2019/01/22 Python
django 实现将本地图片存入数据库,并能显示在web上的示例
2019/08/07 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
如何实现jdbc性能优化
2012/07/30 面试题
成品库仓管员岗位职责
2014/04/06 职场文书
民主评议党员总结
2014/10/20 职场文书
2016银行求职自荐信
2016/01/28 职场文书
扩展多台相同的Web服务器
2021/04/01 Servers