前言
终于要讲到这个著名的设计原则,其实它比其他设计模式都简单。
依赖注入的实质就是把一个类不可能更换的部分 和 可更换的部分 分离开来,通过注入的方式来使用,从而达到解耦的目的。

这里就举个数据库链接的栗子,希望大家理解

一个数据库连接类

class Mysql{
private $host;
private $port;
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();
$con = $db->connect();

通常应该设计为单例,这里就先不搞复杂了。

依赖注入

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

class MysqlConfiguration
{

private $host;
private $port;
private $username;
private $password;
private $db_name;
public function __construct(string $host, int $port, string $username, string $password,string $db_name)
{

$this->host = $host;
$this->port = $port;
$this->username = $username;
$this->password = $password;
$this->db_name = $db_name;
}
public function getHost(): string
{

return $this->host;
}
public function getPort(): int
{

return $this->port;
}
public function getUsername(): string
{

return $this->username;
}
public function getPassword(): string
{

return $this->password;
}
public function getDbName(): string
{

return $this->db_name;
}
}

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

class Mysql
{
private $configuration;
public function __construct(DatabaseConfiguration $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','','my_db',22);
$db = new Mysql($config);
$con = $db->connect();

$config是注入Mysql的,这就是所谓的依赖注入。

更多相关文章

  1. 在数据库中存储行数或动态获取
  2. 这是什么原因啊,没有找出错来啊(数据库用的是mysql)
  3. 使用ORM在不在数据库中的表上的外键
  4. PHP5中数据库抽象层: PDO
  5. PHP用于解析JSON并添加到数据库mysql
  6. 项目实战7—Mysql实现企业级数据库主从复制架构实战
  7. Mysql数据库的打开和关闭
  8. oracle、mysql、db2三大数据库分页方法的整理
  9. MySQL---数据库从入门走向大神系列(三)-修改数据库编码/DOS窗口

随机推荐

  1. 探寻 Redis 超时元凶的全过程剖析
  2. 漫谈设计模式在 Spring 框架中的良好实践
  3. 分布式锁不是控制并发幂等的方式
  4. 福利时刻 | 盖楼送《高可用可伸缩微服务
  5. Flyway 助力数据库脚本自动化管理攻略
  6. MySQL单表数据不要超过500万行:是经验数值
  7. 面试过程中的失配与错位,大家怎么看?
  8. 汉诺塔问题
  9. WSL2:我在原生的Win10玩转Linux系统
  10. Spring Security 从问题到解决:谈踩坑、源