概念:把不同的接口封装成统一的api
实例: 这里以数据库连接为例
首先定义一个接口来约束数据库类必须实现的方法:DatabaseInterFace.php
<?php
namespace app;
/**
* 数据库连接接口
* Interface DatabaseInterFace
* @package app
*/
interface DatabaseInterFace
{
/**
* 数据库连接
* @param $host string 地址
* @param $user string 用户名
* @param $password string 密码
* @param $dbName string 数据库名
* @return mixed
*/
public function connect($host, $user, $password, $dbName);
/**
* 执行sql
* @param $sql string 执行语句
* @return mixed
*/
public function query($sql);
/**
* 关闭数据库连接
* @return mixed
*/
public function close();
}
开始定义数据库连接类:

以Mysql.php为例
<?php
namespace app\driver;
/**
* Mysql连接类
* Class Mysql
* @package app\driver
*/
class Mysql implements \app\DatabaseInterFace
{
protected $conn;
/**
* 数据库连接
* @param $host string 地址
* @param $user string 用户名
* @param $password string 密码
* @param $dbName string 数据库名
* @return mixed
*/
public function connect($host, $user, $password, $dbName)
{
// 这里把数据库连接代码加上
}
/**
* 执行sql
* @param $sql string 执行语句
* @return mixed
*/
public function query($sql)
{
// 这里要把实际代码补上
}
/**
* 关闭数据库连接
* @return mixed
*/
public function close()
{
// 这里要把实际代码补上
}
}
图中Mysqli.php和PDO.php和上面的Mysql.php文件一样,也是要实现connect、query、close方法,只是各自的连接代码写法不一样(这个和thinkphp5的数据库连接驱动类似)
定义好了数据库连接类,开始在index.php中调用
<?php
// 定义自动注册
spl_autoload_register(function ($class) {
include $class . '.php';
});
// 调用数据库连接类
// 说明:由于数据库连接我们都定义成一样的方法了,所以这里可以根据自己的需要把Mysql连接类换成PDO或者Mysqli或者其他,这就凸现了适配器的作用
$database = new \app\driver\Mysql();
// 连接数据库
$dbConn = $database->connect('127.0.0.1', 'root', 'root', 'test');
// 执行sql
$res = $dbConn->query('select * from t_study limit 1');
// 关闭数据库连接
$dbConn->close();
到此就完成了
来源:https://www.cnblogs.com/waterliang/p/12164097.html