当前位置:首页 > PHP教程 > php高级应用 > 列表

PHP经典设计模式之依赖注入定义与用法详解

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-22 23:35:09 浏览: 评论:0 

这篇文章主要介绍了PHP经典设计模式之依赖注入,结合实例形式分析了php依赖注入的定义、原理与用法,需要的朋友可以参考下。

本文实例讲述了PHP经典设计模式之依赖注入定义与用法,分享给大家供大家参考,具体如下:

依赖注入的实质就是把一个类不可能更换的部分和可更换的部分分离开来,通过注入的方式来使用,从而达到解耦的目的。

一个数据库连接类:

  1. class Mysql{ 
  2.  private $host
  3.  private $prot
  4.  private $username
  5.  private $password
  6.  private $db_name
  7.  // 构造方法 
  8.  public function __construct(){ 
  9.    $this->host = '127.0.0.1'
  10.    $this->port = 22; 
  11.    $this->username = 'root'
  12.    $this->password = ''
  13.    $this->db_name = 'my_db'
  14.  } 
  15.  // 连接 
  16.  public function connect(){ 
  17.    return mysqli_connect($this->host,$this->username,$this->password,$this->db_name,$this->port); 
  18.  } 

使用这个类:

$db = new Mysql();

$db->connect();

通常数据库连接类应该设计为单列,这里先不要搞复杂了。

依赖注入

显然,数据库的配置是可以更换的部分,因此我们需要先把它拎出来:

  1. class MysqlConfiguration{ 
  2.   private $host
  3.   private $prot
  4.   private $username
  5.   private $password
  6.   private $db_name
  7.   public function __construct($host,$port,$username,$password,$db_name){ 
  8.     $this->host = $host
  9.     $this->port = $port
  10.     $this->username = $username
  11.     $this->password = $password
  12.     $this->db_name = $db_name
  13.   } 
  14.   public function getHost(){ 
  15.     return $this->host; 
  16.   } 
  17.   public function getPort(){ 
  18.     return $this->port(); 
  19.   } 
  20.   public function getUsername(){ 
  21.     return $this->username; 
  22.   } 
  23.   public function getPassword(){ 
  24.     return $this->password; 
  25.   } 
  26.   public function getDbName(){ 
  27.     return $this->db_name; 
  28.   } 

然后不可替换的部分这样:

  1. class Mysql{ 
  2.  private $configuration
  3.  public function __construct($config){ 
  4.    $this->configuration = $config
  5.  } 
  6.  // 连接 
  7.  public function connect(){ 
  8.    return mysqli_connect($this->configuration->getHost(),$this->configuration->getUsername(),$this->configuration->getPassword(),$this->configuration->getDbName(),$this->configuration->getPort()); 
  9.  } 

这样就完成了配置文件和连接逻辑的分离。

使用:

  1. $config = new MysqlConfiguration('127.0.0.1','root','password','my_db',22); 
  2. // $config是注入Mysql的,这就是所谓的依赖注入 
  3. $db = new Mysql($config); 
  4. $db->connect();

Tags: PHP设计模式 PHP依赖注入

分享到: