概念
将不同函数的接口封装成统一的api,每个类必须要实现接口中的方法,eg:操作mysql数据库有mysql,PDO,MySQLi三种,可以将三种分装成统一的接口,再例如cache适配器,将memeche ,redis ,file,apc等不同的缓存函数分装成统一的接口。
实现
先定义一个接口,让每一类都实现这一个接口
//定义接口 interface Adapter { public function connect(); public function close(); public function query(); //还以定义很多,也就是增删改查 }
定义mysqli操作数据库类,实现Adapter接口
class MyMysqli implements Adapter { protected $connect; public function connect() { // TODO: Implement connect() method. $this->connect = mysqli_connect('127.0.0.1', 'root', ''); mysqli_select_db($this->connect, 'mysql'); return $this->connect; } public function query() { // TODO: Implement query() method. return mysqli_query($this->connect, 'show tables'); } public function close() { // TODO: Implement close() method. mysqli_close($this->connect); } }
定义PDO操作数据库,实现Adapter接口
class MyPDO implements Adapter { protected $connect; public function connect() { // TODO: Implement connect() method. $this->connect = new PDO('mysql:dbname=test;host=127.0.0.1', 'root', ''); } public function query() { // TODO: Implement query() method. return $this->connect->query("show tables"); } public function close() { // TODO: Implement close() method. unset($this->connect); } }
在要操作数据库的地方直接调用
$pdo = new MyMysqli(); $pdo->connect(); $pdo->query();
写了怎么就感觉是实现相同的接口呢。有点纳闷。