Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:完成的非常好
1.接口的应用场景:用抽象类来实现接口
// 定义一个数据库的CURD接口
interface iDBase
{
// 新增
public static function insert($db,$data);
// 查询
public static function select($db,$options=[]);
// 更新
public static function update($db,$options=[]);
// 删除
public static function delete($db,$where);
}
// 实现类使用抽象类来充当
// class Db implements iDBase
abstract class aDb implements iDBase
{
// 使用单例模式连接:创建类的唯一实例,唯一对象
protected static $db = null;
// 抽象类充当接口实现类时,不用必须实现接口中的抽象方法
// 当实现类中的方法中有一些公共操作时,可以将这些操作放在中间的抽象类中实现它
// // 新增
// public static function insert($db,$data){}
// // 查询
// public static function select($db,$options=[]){}
// // 更新
// public static function update($db,$options=[]){}
// // 删除
// public static function delete($db,$where){}
public static function connect($dsn,$username,$password)
{
if(is_null(self::$db)){
// 如果当前连接对象是null,表示未连接数据库
self::$db = new PDO($dsn,$username,$password);
}
return self::$db;
}
}
// 类的真正实现类
class DB extends aDb
{
// 新增
public static function insert($db,$data){
}
// 查询
public static function select($db,$options=[]){
return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
}
// 更新
public static function update($db,$options=[]){
// return $db->query('INSERT `users` SET `name`=?, `email`= ?, `password`=?;')
}
// 删除
public static function delete($db,$where){}
}
// 客户端代码
// 连接参数
$config = [
// 类型
'type' => $type ?? 'mysql',
// 默认数据库主机名(IP)
'host' => $host ?? 'localhost',
// 默认数据库名
'dbname' => $type ?? 'tp5',
// 默认字符编码集
'charset' => $type ?? 'utf8',
// 默认端口号
'port' => $type ?? '3306',
// 默认用户名
'username' => $username ?? 'root',
// 默认用户的密码
'password' => $password ?? 'root'
];
$dsn = sprintf('%s:host=%s;dbname=%s',$config['type'],$config['host'],$config['dbname']);
$username = $config['username'];
$password = $config['password'];
$db = DB::connect($dsn,$username,$password);
// 调用实现类DB中的select()进行查询
foreach(DB::select($db) as $user){
print_r($user);
}
2.新增数据(insert)
// 类的真正实现类
class DB extends aDb
{
// 新增
public static function insert($db,$data){
$sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($data);
return '成功新增'.$stmts->rowCount().'条记录!';
}
// 查询
public static function select($db,$options=[]){
return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
}
// 更新
public static function update($db,$options=[]){
// return $db->query('INSERT `users` SET `name`=?, `email`= ?, `password`=?;')
}
// 删除
public static function delete($db,$where){}
}
// 调用实现类DB中的insert()进行插入数据
$data = ['小花','xiaohua',18];
$res = DB::insert($db,$data);
echo $res;
3.更新数据(update)
// 类的真正实现类
class DB extends aDb
{
// 新增
public static function insert($db,$data){
$sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($data);
return '成功新增'.$stmts->rowCount().'条记录!';
}
// 查询
public static function select($db,$options=[]){
return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
}
// 更新
public static function update($db,$data){
$sql = 'UPDATE `tp_user` SET `username`=?,`age`=? WHERE `id`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($data);
return '成功更新'.$stmts->rowCount().'条记录!';
}
// 删除
public static function delete($db,$where){}
}
4.删除数据(delete)
// 类的真正实现类
class DB extends aDb
{
// 新增
public static function insert($db,$data){
$sql = 'INSERT `tp_user` SET `username`=?,`password`=?,`age`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($data);
return '成功新增'.$stmts->rowCount().'条记录!';
}
// 查询
public static function select($db,$options=[]){
return $db->query('SELECT * FROM `tp_user` LIMIT 3')->fetchAll(PDO::FETCH_ASSOC);
}
// 更新
public static function update($db,$data){
$sql = 'UPDATE `tp_user` SET `username`=?,`age`=? WHERE `id`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($data);
return '成功更新'.$stmts->rowCount().'条记录!';
}
// 删除
public static function delete($db,$where){
$sql = 'DELETE FROM `tp_user` WHERE `id`=?;';
$stmts = $db->prepare($sql);
$stmts->execute($where);
return '成功删除'.$stmts->rowCount().'条记录!';
}
}
// 调用实现类DB中的delete()进行数据删除
$data = [3];
$res = DB::delete($db,$data);
echo $res;
5.这里的接口好像没啥直接影响,删除也没关系
interface iDBase
{
// 新增
// public static function insert($db,$data);
// 查询
// public static function select($db,$options=[]);
// 更新
// public static function update($db,$data);
// 删除
// public static function delete($db,$where);
}