PHP经典设计模式之依赖注入定义与用法详解
时间:2022-07-27
本文章向大家介绍PHP经典设计模式之依赖注入定义与用法详解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
本文实例讲述了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();
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- spring的缓存(cache)-本地
- spring的缓存(cache)-分布式缓存
- spring的缓存(cache)-(缓存穿透、缓存击穿、缓存雪崩、热点数据)
- spring-配置文件外化
- 腾讯地图获取全国行政区划检索列表Demo
- iOS开发~UIView layer 之前的关系
- iOS进阶_KVC(&KVC赋值取值过程分析&KVC自定义&异常处理)
- python 学习笔记(8)——python绝对路径相对路径
- 设计模式-访问者模式
- 设计模式-空对象模式
- 设计模式-观察者模式
- Selenium自动化最佳实践技巧(上)
- 如何同时压测创建和删除接口
- 为什么测试覆盖率如此重要
- 5行Python就能爬取 3000+ 上市公司的信息?