PHP設計模式之適配器模式

1.說明

1.適配器模式: 可以將截然不同的函數接口封裝成統一的API
2.實際應用舉例,PHP的數據庫操作有mysql, mysqli, pdo3種,可以用適配器模式統一成一致。類似的場景還有cache適配器,就是將memcache,redis,file,apc等不同的緩存函數統一成一致的
3.下面的例子可以幫助你對付各種數據庫鏈接功能,mysql mysqli, pdo隨便選,操作都抽象爲統一的接口客戶端不需要修改一行數據庫鏈接方式

2.創建一個接口

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

3.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);
    }
}

4.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);
    }
}

5.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);
    }
}

6.實例調用,(統一接口調用)

$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();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章