zoukankan      html  css  js  c++  java
  • [PHP] 使用适配器模式处理数据库对象

    适配器模式的定义:

    将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原来由于接口不兼容而不能一起工作的那此类可以一起工作

    包括两种模式:

    类适配器模式与对象适配器

    类适配器:Adapter类与被适配类是继承关系

    对象适配器:Adapter对象与被适配类对象是委托关系 , 委托关系就是通过构造函数或者方法传入被适配对象

    PDOAdapter 继承 PDO类 , 扩展里面的方法 , 这就是类适配器模式

    ArticleModel传入PDOAdapter 对象 , 扩展PDOAdapter 对象的方法 , 这就是对象适配器

    <?php
    //类适配器
    class PDOAdapter extends PDO{
        private $dsn = null;
        private $username = null;
        private $password = null;
        private $timeout = 30;
        private $charset = "utf8";
        private $options = array(
            PDO::ATTR_AUTOCOMMIT            => true,
            PDO::ATTR_ERRMODE               => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE    => PDO::FETCH_ASSOC,
        );
        public function __construct($dsn, $username, $password, $timeout = null){
            $this->dsn = $dsn;
            $this->username = $username;
            $this->password = $password;
            $this->timeout = intval($timeout);
            parent::__construct($dsn, $username, $password, $this->options);
            $this->exec("set names ".$this->charset);
        }
        public function execute($sql, $params = array()){
            $stmt = $this->prepare($sql);
            $execStatus=$stmt->execute($params);
            return $execStatus;
        }
        public function getAll($sql, $params = array()){
            $stmt = $this->prepare($sql);
            $stmt->execute($params);
            return $stmt->fetchAll();
        }
    }
    //对象适配器,使用委派
    class ArticleModel{
        private $pdo=null;
        public function __construct($pdo){
            $this->pdo=$pdo;
        }
        //委派调用PDOAdapter的getAll方法
        public function getArticleList(){
            $res=$this->pdo->getAll("select * from countries");
            return $res;
        }
    }
    class Controller{
      public function doAction(){
          try {
              $pdo=new PDOAdapter("mysql:host=127.0.0.1;port=3306;dbname=phpfly","phpfly","phpfly");
              $model=new ArticleModel($pdo);
              $res=$model->getArticleList();
              var_dump($res);
    
          } catch (Exception $e) {
              var_dump($e->getMessage());
          }
    
      }
    }
    $c=new Controller();
    $c->doAction();

    开源作品

    GO-FLY,一套可私有化部署的免费开源客服系统,安装过程不超过五分钟(超过你打我 !),基于Golang开发,二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的网页在线客服系统,致力于帮助广大开发者/中小站长快速整合私有客服功能
    github地址:go-fly
    官网地址:https://gofly.sopans.com

    赞赏作者

    微信交流

  • 相关阅读:
    Oracle 服务命名(别名)的配置及原理,plsql连接用
    AdHoc发布时出现重复Provisioning Profile的解决方案
    xcode5时代如何设置Architectures和Valid Architectures
    C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]
    DataTable的数据批量写入数据库
    高中生活--第7篇–我为什么不交作业
    ITFriend网站内测公测感悟
    网站推广第一周总结和反思
    第一次当面试官
    技术人才的出路在哪里,5种选择和2种思路
  • 原文地址:https://www.cnblogs.com/taoshihan/p/14596161.html
Copyright © 2011-2022 走看看