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 相关文章推荐
Admin generator, filters and I18n
Oct 06 PHP
PHP curl 并发最佳实践代码分享
Sep 05 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
CI框架中通过hook的方式实现简单的权限控制
Jan 07 PHP
php模拟post提交数据的方法
Feb 12 PHP
如何解决phpmyadmin导入数据库文件最大限制2048KB
Oct 09 PHP
php创建无限级树型菜单
Nov 05 PHP
PHP面向对象编程之深入理解方法重载与方法覆盖(多态)
Dec 24 PHP
php使用preg_match()函数验证ip地址的方法
Jan 07 PHP
Yii2第三方类库插件Imagine的安装和使用
Jul 06 PHP
PHP开发中解决并发问题的几种实现方法分析
Nov 13 PHP
yii2.0框架实现上传excel文件后导入到数据库的方法示例
Apr 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文件读取功能的应用实例
2015/05/08 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
PHP执行linux命令常用函数汇总
2016/02/02 PHP
javascript 函数式编程
2007/08/16 Javascript
使用dynatrace-ajax跟踪JavaScript的性能
2010/04/12 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
2016/01/19 Javascript
每个程序员都需要学习 JavaScript 的7个理由小结
2016/09/03 Javascript
vue2.0全局组件之pdf详解
2017/06/26 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
JS实现table表格固定表头且表头随横向滚动而滚动
2017/10/26 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
js函数和this用法实例分析
2020/03/13 Javascript
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python写的一个定时重跑获取数据库数据
2016/12/28 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
Python使用正则表达式过滤或替换HTML标签的方法详解
2017/09/25 Python
Python实现查找数组中任意第k大的数字算法示例
2019/01/23 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
keras自定义损失函数并且模型加载的写法介绍
2020/06/15 Python
如何在Windows中安装多个python解释器
2020/06/16 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
2020/07/02 Python
python3爬虫中多线程进行解锁操作实例
2020/11/25 Python
HTML5 客户端数据库简易使用:IndexedDB
2019/12/19 HTML / CSS
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
学生会主席竞聘书
2014/03/31 职场文书
倡议书范文格式
2014/05/12 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
蓬莱阁导游词
2015/02/04 职场文书
python人工智能human learn绘图可创建机器学习模型
2021/11/23 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫