1、适配器模式,可以将截然不同的函数接口封装成统一的API
2、应用实例:PHP的数据库操作有mysql、pdo、mysqli,可以用适配器模式统一成一致。
3、代码实例:
首先定义一个适配所有数据库操作的接口
<?php
interface IDatabase
{
/**
* 数据库连接
* @param string $host
* @param string $user
* @param string $name
* @param string $dbName
* @return mixed
*/
function connect($host, $user, $name, $dbName);
/**
* 数据库查询
* @param $sql
* @return mixed
*/
function query($sql);
/**
* 关闭数据库
* @return mixed
*/
function close();
}
接着定义各种数据库类型操作接口,第一种MySQL
<?php
namespace db;
class MySQL implements \IDatabase
{
protected $conn;
public function connect($host, $user, $name, $dbName)
{
$this->conn = mysql_connect($host, $user, $name);
mysql_select_db($dbName, $this->conn);
}
public function query($sql)
{
return mysql_query($sql, $this->conn);
}
public function close()
{
mysql_close($this->conn);
}
}
第二种MySQLi
<?php
namespace db;
class MySQLi implements \IDatabase
{
protected $conn;
public function connect($host, $user, $name, $dbName)
{
$this->conn = mysqli_connect($host, $user, $name, $dbName);
}
public function query($sql)
{
return mysqli_query($this->conn, $sql);
}
public function close()
{
mysqli_close($this->conn);
}
}
第三种PDO
<?php
namespace db;
class PDO implements \IDatabase
{
protected $conn;
public function connect($host, $user, $name, $dbName)
{
$this->conn = new \PDO("mysql:host=$host;dbname=$dbName", $user, $name);
}
public function query($sql)
{
return $this->conn->query($sql);
}
public function close()
{
unset($this->conn);
}
}
需要哪种数据库类型的操作直接调用哪个类型即可,比如想使用pdo的,则直接:
$pdo = new \db\PDO();
$pdo->connect('x', 'x', 'x', 'x');
$pdo->query('xxx');
$pdo->close();
加我微信公众号【皮蛋馅儿】,一起学习哦~
网友评论