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 相关文章推荐
杏林同学录(二)
Oct 09 PHP
PHP生成月历代码
Jun 14 PHP
PHP分页显示制作详细讲解
Nov 19 PHP
单点登录 Ucenter示例分析
Oct 29 PHP
linux中cd命令使用详解
Jan 08 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
Oct 10 PHP
PHP Static延迟静态绑定用法分析
Mar 16 PHP
php用户登录之cookie信息安全分析
May 13 PHP
项目中应用Redis+Php的场景
May 22 PHP
Yii2框架dropDownList下拉菜单用法实例分析
Jul 18 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
Feb 18 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
Apr 06 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
Laravel 4 初级教程之Pages、表单验证
2014/10/30 PHP
thinkphp5使用无限极分类
2019/02/18 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
表单(FORM)的一些实用效果代码
2007/03/25 Javascript
javascript的parseFloat()方法精度问题探讨
2013/11/26 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
使用js画图之正弦曲线
2015/01/12 Javascript
多种jQuery绑定事件的实现方式
2016/06/13 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
基于JavaScript实现的快速排序算法分析
2017/04/14 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
浅谈angular表单提交中ng-submit的默认使用方法
2018/09/30 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
python使用clear方法清除字典内全部数据实例
2015/07/11 Python
python实现折半查找和归并排序算法
2017/04/14 Python
Python使用struct处理二进制的实例详解
2017/09/11 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python itchat实现调用微信接口的第三方模块方法
2019/06/11 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
python利用JMeter测试Tornado的多线程
2020/01/12 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
军训学生自我鉴定
2014/02/12 职场文书
公司授权委托书
2014/04/04 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
校园广播稿精选
2014/10/01 职场文书
幼儿园见习报告范文
2014/10/30 职场文书
诚信考试承诺书范文
2015/04/29 职场文书
小孩不笨观后感
2015/06/03 职场文书
react中props 的使用及进行限制的方法
2021/04/28 Javascript
Apache Pulsar结合Hudi构建Lakehouse方案分析
2022/03/31 Servers
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server