[PHP] 纯文本查看 复制代码 <?php
//定义接口
interface database
{
public function connect($param); //定义接口方法
public function query($sql); //定义接口方法
public function fetch($query); //定义接口方法
}
//接口继承
class mysql implements database
{
//集成上面 connect 的接口
public function connect($param)
{
echo 'mysql::connect('.$param.')';
}
//集成上面 query 的接口
public function query($sql)
{
echo 'mysql::query('.$sql.')';
}
//集成上面 fetch 的接口
public function fetch($query)
{
echo 'mysql::fetch('.$query.')';
}
}
//接口继承
class sqlserver implements database
{
public function connect($param)
{
echo 'sqlserver::connect('.$param.')';
}
public function query($sql)
{
echo 'sqlserver::query('.$sql.')';
}
public function fetch($query)
{
echo 'sqlserver::fetch('.$query.')';
}
}
//接口继承
class oracle implements database
{
public function connect($param)
{
echo 'oracle::connect('.$param.')';
}
public function query($sql)
{
echo 'oracle::query('.$sql.')';
}
public function fetch($query)
{
echo 'oracle::fetch('.$query.')';
}
}
class dbfactory
{
private $objects = array();
private $classes = array();
public function __construct()
{
$this->classes = array(
'mysql',
'sqlserver',
'oracle'
);
for($i=0; $i<count($this->classes); $i++)
{
if(in_array('database', class_implements($this->classes[$i], false)))
{
$this->objects[$this->classes[$i]] = new $this->classes[$i];
} else {
unset($this->classes[$i]);
}
}
}
public function query($sql, $type = 'mysql')
{
// empty 检测变量对象 $this->objects 是否为空
if(empty($this->objects))
{
exit('No class');
}
//检测 $this->classes 成员属性数组对象中是否存在 $type 传递过来的值,这里 ! 号 取反,有则 执行 if 外面
if(!in_array($type, $this->classes))
{
exit('NO '.$type.' 没有继承接口'); //没有这个值的时候结束当前函数操作并退出
}
//下面这句话同等: $object = new mysql(); $object->query($sql);
$this->objects[$type]->query($sql); //实例化 类 及调用类里面的方法
}
}
$factory = new dbfactory();
$factory->query('SELECT * FROM member', 'mysql');
echo '<hr/>';
$factory->query('SELECT * FROM member', 'sqlserver');
echo '<hr/>';
$factory->query('SELECT * FROM member', 'oracle');
?> |