本次代码符合PHP规范PRS_0,根目录下新建一个Frame的目录(核心目录),建立APP目录(项目目录),统一访问入口文件index.php,建立类文件Loader.php(用于自动加载类)
index.php 公共部分
define('BASEDIR',__DIR__);
include BASEDIR.'/Frame/Loader.php';
spl_autoload_register('\\Frame\\Loader::autoload');
Loader.php
<?php
namespace Frame;
class Loader
{
static function autoload($class)
{
require BASEDIR.'/'.str_replace('\\','/',$class).'.php';
}
}
适配器模式
简单点来说,比如一个开发团队,有些开发人员的环境只有mysql、有些开发人员的环境只有PDO,有些开发人员的环境只有mysqli,这个时候适配器就可以轻松的帮我们解决这个问题。首先我们声明一个接口 IDatabase.php 类来约定适配器的行为。
<?php namespace Frame; interface IDatabase { public function connect($host, $user, $passwd, $dbname);//链接数据库 public function query($sql); //执行sql语句 public function close(); //关闭数据库 }
在Frame目录下创建Database目录,分别创建Mysql.php、Mysqli.php、PDO.php类(实现IDadabase类的方法)
Mysql.php类
<?php namespace Frame\Database; use Frame\IDatabase; class Mysql implements IDatabase { protected $conn;//数据库连接对象 public function connect($host, $user, $passwd, $dbname) { $conn = mysql_connect($host, $user, $passwd);//连接数据库 mysql_select_db($dbname, $conn);//选择数据库 $this->conn = $conn; } public function query($sql) { $res = mysql_query($sql, $this->conn); return $res; } public function close() { mysql_close($this->conn); } }
Mysqli.php类
<?php namespace Frame\Database; use Frame\IDatabase; class Mysqli implements IDatabase { protected $conn; public function connect($host, $user, $passwd, $dbname) { $conn = mysqli_connect($host, $user, $passwd, $dbname); $this->conn = $conn; } public function query($sql) { $res = mysqli_query($this->conn, $sql); return $res; } public function close() { mysqli_close($this->conn); } }
PDO.php类
<?php namespace Frame\Database; use Frame\IDatabase; class PDO implements IDatabase { protected $conn; public function connect($host, $user, $passwd, $dbname) { $conn = new \PDO("mysql:host=$host;dbanme=$dbname", $user, $passwd); $this->conn = $conn; } public function query($sql) { $res = $this->conn->query($sql); return $res; } public function close() { unset($this->conn); } }
index.php中调用,这样开发人员就可以根据自己的环境去使用不同的数据库连接方式了。
<?php define('BASEDIR',__DIR__); include BASEDIR.'/Frame/Loader.php'; spl_autoload_register('\\Frame\\Loader::autoload'); $db = new \Frame\Database\Mysql(); //$db = new \Frame\Database\PDO(); //$db = new \Frame\Database\Mysqli(); $db->connect('127.0.0.1','root',123456,'test'); $db->query('show databases'); $db->close();
One comment
适配器模式
1.适配器模式,可以将截然不同的函数接口封装成统-的API
2.实际应用举例, PHP的数据库操作有mysql , mysqli , pdo3种,
可以用适配器模式统一-成- 致。类似的场景还有cache适配器,将memcache , redis , file , apc等不同的缓存函数,统- -成一致