您的足迹:首页 > php知识 >php设计模式之适配器模式

php设计模式之适配器模式

适配器模式,可以将截然不同的函数接口封装成统一的API;
实际应用举例,PHP数据库操作有mysql,mysqli,pdo三种,可以用适配器模式统一成一致。类似场景还有cache适配,将memcache,redis,file,apc等不同的缓存函数,统一成一致;
interface IDatabase{
function connect($host,$user,$password,$dbname);
function query($sql);
function close();
}
Database下面的 mysql mysqli pdo
============Mysql.php
namespace IMooc\Database;
use IMooc\IDatabase;
class Mysql implements IDatabase{
protected $conn;

function connect($host, $user, $password, $dbname){
$conn = mysql_connect($host,$user,$password);
mysql_db_name($dbname,$conn);
$this->conn = $conn;
}

function query($sql){
$res = mysql_query($sql,$this->conn);
return $res;
}
function close(){
mysql_close($this->conn);
}

}
==============PDO.php
namespace IMooc\Database;
use IMooc\IDatabase;

class PDO implements IDatabase{
protected $conn;
function connect($host,$user,$password,$dbname){
$conn = new \PDO("mysql:host=$host;dbname=$dbname",$user,$password);
$this->conn = $conn;
}
function query($sql){
return $this->conn->query($sql);
}
function close(){
unset($this->conn);
}
}
在一个命名空间中,当 PHP 遇到一个非限定的类时,类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称。因此,new \PDO 为什么要加 \ 。否则,会因为在当前命名空间找不到 PDO 类而产生致命错误。
新建一个接口 IDatabase  然后在这个接口里面申明统一的方法体,再让不同的类去实现这个接口,和重写其抽象方法。当我们在入口文件使用到不同的类的时候,就只是实例化的类名不同,其它调用方法体的地方都一致。  当然如如果配合工厂模式和注册树的话,就更简单了。

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)