「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」
课程背景
- 最近完成一个项目 对于代码分层有了一丢丢了解 但是架构设计合理性上存在问题
万物看本质
基本功硬 底层知识扎实才能写出更优质的代码 才能走得更远- 作为努力奔跑的程序员 又一次的去温习 思考 设计模式等基础的php知识
- 因为掘金粑粑有奖励,所以把学习的笔记整理记录并分享了出来。
正文开始
适配器
字面上的理解是适应各种场景的意思。在PHP开发中会接触到不止一种数据库,而且每一种数据据的链接,关闭,查询等方法都不尽相同。这就导致一个通用性的问题,用不同的数据库就得学习不同数据库的操作数据库方法。如何统一所有数据库的调用方式,这就是适配器模式。 1 创建接口文件 \Liiy\Database\IDatabase.php
<?php
namespace Liiy\Database;
interface IDatabase{
/**数据库链接 */
function connect($host, $user, $passwd, $dbbane);
/**数据库查询方法 */
function select($sql);
/**关闭数据库 */
function close();
}
接口中定义了三个方法,connect用于链接数据库操作,select用于数据库的查询数据,close用于关闭数据库链接。接口中只是定义了方法名,但是未写具体的实现方法。
2 创建不同数据库执行数据操作的具体实现类这里以MySQLi的实现方法进行详细讲解。其余的方法类似。 创建文件 Liiy\Database\MySQLi.php 并实现上面的Idatabase接口
<?php
namespace Liiy\Database;
class MySQLi implements IDatabase{
private $connection;
function connect($host, $user, $passwd, $dbbane){
$con = mysqli_connect($host, $user,$passwd,$dbbane);
if (!$con){
die("连接错误: " . mysqli_connect_error());
}
$this->connection = $con;
}
function select($sql){
$result = $this->connection->query($sql);
$res_data = [];
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$res_data [] = $row;
}
}
return $res_data;
}
function close(){
$this->connection->close();
}
}
这个类中,我们具体实现了接口中定义的三个方法。当然,也可以有更多的方法,只是我们这里是简单的进行演示,讲解原理。
下一章节更精彩