基本需求
引入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; } } }
注意:接口在实现的时候,要添加到自动加载类中,自动类加载也是可以加载接口的