zoukankan      html  css  js  c++  java
  • php设计模式 适配器模式

    适配器模式,可以将截然不同的函数接口封装成统一的API;

    应用举例,PHP的数据库操作有Mysql、Mysqli、pdo三种,可以用适配器模式统一成一致,类似的场景还有cache适配器,将memcache、redis,file,apc等不同的缓存函数统一成一致。

    IDatabase.php

    <?php
    namespace Baobab;
    
    interface IDatabase{
        function connect($host, $user, $passwd, $dbname);
        function query($sql);
        function fetch_result($result);
        function close();
    }

    Mysqli.php

    <?php
    namespace BaobabDatabase;
    
    use BaobabIDatabase;
    class Mysqli implements IDatabase{
        protected $conn;
        function connect($host, $user, $passwd, $dbname){
            $conn = mysqli_connect($host, $user, $passwd, $dbname);
            mysqli_set_charset($conn, 'utf8');
            $this->conn = $conn;
        }
        
        function query($sql) {
            return mysqli_query($this->conn, $sql);
        }
        
        function fetch_result($result){
            return mysqli_fetch_all($result);
        }
        
        function close() {
            mysqli_close($this->conn);
        }
    }

    Pdo.php

    <?php
    namespace BaobabDatabase;
    
    use BaobabIDatabase;
    class Pdo implements IDatabase{
        protected $conn;
        function connect($host, $user, $passwd, $dbname){
           $conn =  new PDO("mysql:dbname=$dbname;host=$host", $user, $passwd);
           $this->conn = $conn;
        }
        
        function query($sql){
            return $this->conn->query($sql);
        }
        
        function fetch_result($result){
            
        }
        
        function close() {
            unset($this->conn);
        }
    }

    index.php

    $db = new BaobabDatabaseMysqli();
    $db->connect('127.0.0.1', 'root', '', 'test');
    $res = $db->query('select * from ha_cl');
    print_r($db->fetch_result($res));
    $db->close();

    还可以参考  http://www.phppan.com/2010/07/php-design-pattern-10-adapter/

  • 相关阅读:
    OI回忆录
    【CSP2019】题解合集
    微电影《Junior·BQB》——剧本
    【UOJ139】【UER #4】被删除的黑白树
    NOIWC2019 冬眠记
    THUWC2019 划水记
    【XSY3413】Lambda
    【BZOJ3065】带插入区间k小值
    【BZOJ3600】没有人的算术
    【BZOJ4864】【BJWC2017】神秘物质
  • 原文地址:https://www.cnblogs.com/tianxintian22/p/5227695.html
Copyright © 2011-2022 走看看