适配器模式

可以将截然不同的函数接口封装成统一的API

下面用数据库的连接来演示适配器模式,一下是每个php文件主要代码,省略部分代码,如:命名空间,类的自动加载等代码

定义一个database接口,mysql、mysqli、pdo三种连接数据库的方式统一继承这个接口

Database.php

<?php
/**
* 接口
*/
interface Database
{
    function connect($host, $user, $passwd, $dbname);
    function query($sql);
    function close();
}

MYSQL.php

<?php
/**
* mysql方式连接数据库
*/
class MYSQL implements Database
{
    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)
    {
        return mysql_query($sql, $this->conn);
    }
    function close()
    {
        mysql_close($this->conn);
    }
}

MYSQLi.php

<?php
/**
* mysqli方式连接数据库
*/
class MYSQLi implements Database
{
    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.php

<?php
/**
* PDO方式连接数据库
*/
class PDO implements Database
{
    protected $conn;
    function connect($host, $user, $passwd, $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);
    }
}

index.php

<?php
/**
* 调用以上三个数据库连接类型中一种
*/
$db = new ...\Database\数据库.php;
$db->connect('localhost', 'root', 'root', 'test');
$db->query('show databases');
$db->close();

本文由 一切随风 创作,可自由转载、引用,但需署名作者且注明文章出处。

4 条评论

  1. 鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099
    鍗庣撼鍏徃鍚堜綔寮€鎴锋墍闇€鏉愭枡锛熺數璇濆彿鐮?5587291507 寰俊STS5099

    微信电话同步?【——183-88909465—微电同号】?华纳公司客服联系方式?【6011643——183-88909465——-】、?华纳公司直属开户
    华纳公司注册会员流程?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    如何成为华纳公司会员?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳直属会员开户步骤?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳公司会员注册指南?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳总公司会员申请?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳公司会员注册所需材料?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳会员开户流程?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳公司注册会员步骤?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳会员申请流程?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】
    华纳公司会员注册指南?(▲18288362750?《?微信STS5099? 】【╃q 2704132802╃】

  2. aqrwlzrvav
    aqrwlzrvav

    洪福齐天粤配

  3. okpkvjufnl
    okpkvjufnl

    五郎八卦棍粤配

  4. edsvzaehlq
    edsvzaehlq

    兄弟写的非常好 https://www.cscnn.com/

添加新评论