数据库请求委托代理
16lz
2021-08-18
数据库请求委托代理
作业标题:0816 oop编程-4
作业内容:请用请求委托原理封装查询构造器(只封装查询操作即可)
- 请求委托原理封装查询构造器
class Query{
private static $db;
protected $table;
protected $field;
protected $limit;
private function __construct()
{
}
static function connect($dsn,$username,$pwd)
{
//创建PDO类的唯一实例 pdo对象
if(is_null(static::$db))
{
static::$db = new PDO($dsn,$username,$pwd);
}
// 返回query实例
return new static();
}
public function table($table)
{
$this->table = $table;
return $this;
}
public function field($field)
{
$this->field = $field;
return $this;
}
public function limit($limit)
{
$this->limit = $limit;
return $this;
}
public function getSql()
{
return sprintf('SELECT %s FROM %s LIMIT %d ',$this->field,$this->table,$this->limit);
}
public function select()
{
return static::$db->query($this->getSql())->fetchAll(PDO::FETCH_ASSOC);
}
}
class Db{
static function __callStatic($method,$args)
{
$dsn = 'mysql:host=localhost;dbname=my_test';
$username = 'root';
$pwd = 'root';
// 获取到被委托的类query实例
$query = Query::connect($dsn,$username,$pwd);
return call_user_func([$query,$method],...$args);
}
}$res = Db::table('emp')->field('ename,empno')->limit(5)->select();
echo '<pre>';
print_r($res);
更多相关文章
- php快递查询接口,一次接入顺丰、京东、申通、圆通、韵达、中通、
- PHP全国快递寄件接口,1天接入四通一达,极兔,宅急送,德邦,京东,天
- 【前端 · 面试 】HTTP 总结(九)—— HTTP 协商缓存
- 【前端 · 面试 】HTTP 总结(七)—— HTTP 缓存概述
- 【前端 · 面试 】HTTP 总结(六)—— HTTP 版本区别
- 【前端 · 面试 】HTTP 总结(五)—— GET 和 POST
- 【前端 · 面试 】HTTP 总结(四)—— HTTP 状态码
- 【前端 · 面试 】HTTP 总结(三)—— HTTP 请求方法
- json 基础啊,xml异步请求,post和get区别