数据库PDO驱动设计构造图
数据库PDO驱动设计代码实战
第一步:实现数据库实现类Mysql,Oracle,和Sqlite
代码如下:
class Mysql{ public function select($sql){ return 'Mysql'.$sql;//仿照数据库查询 }}class Oracle{ public function select($sql){ return 'Oracle'.$sql;//仿照数据库查询 }}class Sqlite{ public function select($sql){ return 'Sqlite'.$sql;//仿照数据库查询 }}
第二步:实现数据库的驱动类
$驱动类->select();
驱动类并没有 select 方法,以是触发驱动类 __call() 调用,
然后在__call方法实现对应类调用->select()
驱动类代码实现:
class DbDriver{ private $dbClassName;//数据库类名 public function __construct($dbClassName) { //保存数据库类名 $this->dbClassName = $dbClassName; } / $驱动类->select($sql),驱动类DbDriver没有select方法,调用__call方法 @param $name @param $arguments / public function __call($name, $arguments) { $dbClassName = $this->dbClassName;//类名 $dbClassObj = new $dbClassName ();//创建类工具 $functionName = $name; //暂不考虑数据类不存在的方法判断// if(!method_exists($dbClass,$functionName)){// return false;//未定义该方法// } return $dbClassObj->$functionName($arguments[0]);//目前select方法只有一个参数 }}
PDO代码运行实例:
$dbDriver = new DbDriver('Mysql');$result = $dbDriver->select('');echo $result;//输出mysql$dbDriver = new DbDriver('Oracle');$result2 = $dbDriver->select('');echo $result2;//输出Oracle$dbDriver = new DbDriver('Sqlite');$result3 = $dbDriver->select('');echo $result3;//输出Sqlite
如果日后改换了数据驱动,
只需将$dbDriver = new DbDriver('Mysql');
换成$dbDriver = new DbDriver('Sqlite');
就可以了,代码无需做其他改动。
数据库PDO驱动设计完全代码
//数据类实现class Mysql{ public function select($sql){ return 'Mysql'.$sql;//仿照数据库查询 }}class Oracle{ public function select($sql){ return 'Oracle'.$sql;//仿照数据库查询 }}class Sqlite{ public function select($sql){ return 'Sqlite'.$sql;//仿照数据库查询 }}//PDO驱动类实现class DbDriver{ private $dbClassName;//数据库类名 public function __construct($dbClassName) { //保存数据库类名 $this->dbClassName = $dbClassName; } / $驱动类->select($sql),驱动类DbDriver没有select方法,调用__call方法 @param $name @param $arguments / public function __call($name, $arguments) { $dbClassName = $this->dbClassName;//类名 $dbClassObj = new $dbClassName ();//创建类工具 $functionName = $name; //暂不考虑数据类不存在的方法判断// if(!method_exists($dbClass,$functionName)){// return false;//未定义该方法// } return $dbClassObj->$functionName($arguments[0]);//目前select方法只有一个参数 }}//驱动类调用Mysql类$dbDriver = new DbDriver('Mysql');$result = $dbDriver->select('');echo $result;//输出mysql//驱动类调用Oracle类$dbDriver = new DbDriver('Oracle');$result2 = $dbDriver->select('');echo $result2;//输出Oracle//驱动类调用Sqlite类$dbDriver = new DbDriver('Sqlite');$result3 = $dbDriver->select('');echo $result3;//输出Sqlite
php7进阶到架构师干系阅读https://www.kancloud.cn/gofor/gofor
末了,欢迎大家留言补充,谈论~~~