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();
相关文章推荐
- [李景山php] 依赖注入和设计模式
- PHP-设计模式-依赖注入
- PHP 依赖注入 (设计模式)
- PHP设计模式之依赖注入
- 设计模式——控制反转&依赖注入
- 设计模式之一----依赖注入
- 【设计模式】控制反转(IoC)与依赖注入(DI)
- 设计模式之依赖注入
- php设计模式经典实例集合
- C#设计模式之控制反转即依赖注入-Spring.NET
- 设计模式 - 依赖注入(Dependency Injection)
- Yii2.0 设计模式 - 依赖注入 Dependent Injection
- PHP经典面试题之设计模式(经常遇到)
- 设计模式之依赖注入
- 《模式——工程化实现及扩展》(设计模式C# 版)《重新研读C#语言》——“自我检验" 参考答案:依赖注入部分
- 类的多态性实现PHP依赖注入模式(模式一)
- 依赖注入 - 设计模式
- 244 设计模式 -- 行为型 -- 依赖注入
- 依赖注入[2]: 基于IoC的设计模式
- Ioc 器管理的应用程序设计,前奏:容器属于哪里? 控制容器的反转和依赖注入模式