本文实例讲述了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();