將各種截然不同的函式介面封裝成統一的API。
PHP中的資料庫操作有MySQL,MySQLi,PDO三種,可以用介面卡模式統一成一致,使不同的資料庫操作,統一成一樣的API。類似的場景還有cache介面卡,可以將memcache,redis,file,apc等不同的快取函式,統一成一致。
首先定義一個介面(有幾個方法,以及相應的引數)。然後,有幾種不同的情況,就寫幾個類實現該介面。將完成相似功能的函式,統一成一致的方法。
<?php
//定義一個介面規範
interface Database{
protected $db;
public function connect($host,$username,$password,$dbname);
public function query($sql);
public function close();
}
//下面是MySQL,MySQLi,PDO類,分別實現了介面中的所有方法
class MySQL implements Database{
public function connect($host,$username,$password,$dbname){
$this->db=mysql_connect($host,$username,$password);
mysql->select_db($dbname);
}
public function query($sql){
return mysql_query($sql);
}
public function close(){
mysql_close($this->db);
}
}
class MySQLi implements Database{
public function connect($host,$username,$password,$dbname){
$this->db=mysql_connect($host,$username,$password,$dbname);
}
public function query($sql){
return mysqli_query($this->db,$sql);
}
public function close(){
mysqli_close($this->db);
}
}
class PDO implements Database{
public function connect($host,$username,$password,$dbname){
$this->db=new PDO("mysql:host=$host;dbname=$dbname",$username,$password);
}
public function query($sql){
return $this->db->query($sql);
}
public function close(){
$this->db=null;
}
}
//下面為測試程式碼 //只需要例項化需要的物件就可以了,規則是一致的
$db=new MySQL();
$db->connect("localhost","root","123456","test");
$result=$db->query("select * from user where id = 1");
$db->close();
$db=new MySQLi();
$db->connect("localhost","root","123456","test");
$result=$db->query("select * from user where id = 1");
$db->close();
$db=new PDO();
$db->connect("localhost","root","123456","test");
$result=$db->query("select * from user where id = 1");
$db->close();
?>