引入PDO

基本需求

引入PDO之后,用户可以自己选择到底是使用MYSQL还是PDO扩展,只需要在配置文件中进行配置就行了

而不需要修改项目中的其他的任何代码,实现无缝切换

基本策略

封装MysqlDB类和PDODB类,让二者都实现(implements) 相同的接口

接口中定义一些方法,MyPDO和MySql都会 implements 实现这个接口并且实现所有接口中的方法,

最近比较懒,代码就不写了

<?php 
interface I_dao{
    public  function exec($sql);
    public static function getInstance($arr);
    public function fetchAll($sql);

}

MyPDO和MySql implements I_dao

<?php 

    /**
     * 数据库连接框架
     */
    class MyPDO implements I_dao
    {
        private static $instance;
        private $host;
        private $user;
        private $pwd;
        private $dbname;
        private $port;
        private $charset;
        private $conne;
        /**
         * 初始化
         */
        private function __construct($data){
            $this->initParam($data);

            $this->DBLink();

            //开启异常模式
            $this->initSetAttr();
        }
        /**
         * 禁止克隆
         */
        private function __clone(){

 

 

cinfig配置文件中,在App分组下。添加一个默认的数据库连接的类型

<?php 

//配置文件
return array(
    /**
     * 配置文件分组
     */
    'db' =>array( // 数据库信息组
        'host' =>'localhost',
        'port'=>'3306',
        'dbname' =>'my_db',
        'user' =>'root',
        'pwd' =>'root',
        'charset' =>'utf8',
    ),
    'App' => array( //应用程序组
        'default_platform' =>'test',   //默认平台
        'default_db' =>'pdo'        //默认数据库pdo
    ),
    'Home' =>array(  //前台平台组

    ),
    'Test' =>array( //测试平台组
        'default_controller' =>'Mybank',
        'default_action' =>'show'
    )
);

因为我们要操作数据连接,都是在Model父类中有个单例,保存操作的数据库对象,以前我们都是单一的写死 使用pdo的

现在改写为

<?php 
class Model
{
    protected $link;
    public function __construct(){
        $this->initInstance();
    }

    public function initInstance(){
        $config=$GLOBALS['conf']['db'];
        switch($GLOBALS['conf']['App']['default_db']){
            case 'pdo':
                $this->link = MyPDO::getInstance($config);
                break;
            case 'mysql':
                echo "还没有啊";
                exit;
                break;
        }
    }
}

注意:接口在实现的时候,要添加到自动加载类中,自动类加载也是可以加载接口的

 

posted @ 2021-01-28 13:22  WhiteSpace  阅读(96)  评论(0编辑  收藏  举报