您的位置:首页 > 编程语言 > PHP开发

PHP经典设计模式 - 依赖注入

2017-06-10 09:38 791 查看
依赖注入的实质就是把一个类
不可能更换的部分
可更换的部分
分离开来,通过注入的方式来使用,从而达到解耦的目的。

一个数据库连接类:

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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: