数据库PDO驱动设计构造图

数据库PDO驱动设计代码实战

第一步:实现数据库实现类Mysql,Oracle,和Sqlite

代码如下:

php7pdophp7魔术办法call的最佳实战之数据库PDO类的驱动设计实战 PHP

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;//输出Sqlitephp7进阶到架构师干系阅读

https://www.kancloud.cn/gofor/gofor

末了,欢迎大家留言补充,谈论~~~