1. 程式人生 > >php設計模式 -- 介面卡模式

php設計模式 -- 介面卡模式

1.介面卡模式: 能夠將截然不同的函式介面封裝成統一的API 
2.實際應用舉例,PHP的資料庫操作有mysql, mysqli, pdo3種。能夠用介面卡模式統一成一致。相似的場景還有cache介面卡,就是將memcache,redis,file,apc等不同的快取函式統一成一致的 
3.以下的樣例能夠幫助你對付各種資料庫連結功能,mysql mysqli, pdo隨便選,操作都抽象為統一的介面client不須要改動一行資料庫連結方式

繼承一個父類,在子類中定義相同的方法名,可以是不同的處理邏輯


程式碼示例

建立一個介面

interface IDatabase
{
    function connect($host, $user, $passwd, $dbname);
    function query($sql);
    function close();
}

mysql封裝

class MySQL implements IDatabase
{
    protected $conn;
    function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysql_connect($host, $user, $passwd);
        mysql_select_db($dbname, $conn);
        $this->conn = $conn;
    }

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

mysqli封裝

class MySQLi implements IDatabase
{
    protected $conn;

    function connect($host, $user, $passwd, $dbname)
    {
        $conn = mysqli_connect
($host, $user, $passwd, $dbname); $this->conn = $conn; } function query($sql) { return mysqli_query($this->conn, $sql); } function close() { mysqli_close($this->conn); } }

pdo封裝

class PDO implements IDatabase
{
    protected $conn;
    function connect($host, $user, $passwd, $dbname)
    {
        $conn = new \PDO("mysql:host=$host;dbname=$dbname", $user, $passwd);
        $this->conn = $conn;
    }

    function query($sql)
    {
        return $this->conn->query($sql);
    }

    function close()
    {
        unset($this->conn);
    }
}

例項呼叫

$db = new PDO();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

$db = MySQLi ();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

$db = MySQl PDO();
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query('show databases');
$db->close();