php接口类 实现数据库CURD小案例
因为PHP只支持单继承,也就是说每个类只能继承一个父类。当声明的心累继承抽象类实现模板以后,它就不能再有其他的父类啦~
为了解决这个问题,php引入了接口(注意哈 这里说的是接口类 一种特殊的类 和编程中数据交换接口有区别不是一个概念)。这里说的接口是一种特殊的抽象类!如果抽象类中的所有方法都是抽象方法,name我们就可以换另外一种声明方式--使用‘接口’技术哈。
请注意一下几点:
接口中的声明的方法必须都是抽象方法
另外不能在接口中声明变量
只能使用const关键字声明为常量的成员属性
而且接口中的所有成员都必须有public的访问权限
接口类 声明使用interface关键字标识
class 类名 implements 接口一,接口二...接口N{
//记得实现接口中所有方法~~!
}
不够刺激是不是 来点干货,你拿到一个成熟系统想二次开发在结构上调整不太现实,那怎么破!这时可以通过定义一些接口并追加相应的实现来完成功能结构的拓展。
class 类名 extends 父类名 implement 接口一,接口二,接口三...{
// so 传送~ 实现所有接口中的抽象方法哈
}
实例
namespace _db;
//接口实战小案例
//定义一个接口,实现数据库的常用操作:CURD
interface iCurd
{
//增加数据
function create($data);
//读取数据
function read();
//更新数据
function update($data,$where);
//删除数据
function delete($where);
}
//创建DB类实现iCurd接口
class DB implements iCurd
{
//数据库的链接对象
protected $pdo=null;
//数据库
protected $table;
//构造方法:链接数据库,并设置默认的数据表
public function __construct($dsn,$username,$password,$table)
{
$this->pdo=new \PDO($dsn,$username,$password);
$this->table=$table;
}
//增加数据
public function create($data)
{
//字段列表
$fields='(name,images,lyric,mus_url,classify,mus_play)';
$values='(:name,:images,:lyric,:mus_url,:classify,:mus_play)';
$sql='INSERT INTO '.$this->table . $fields .' VALUES '.$values;
$stmt=$this->pdo->prepare($sql);
$stmt->execute($data);
// die($stmt->debugDumpParams());
//返回新增数据,新增记录id返回
return[
'count'=>$stmt->rowCount(),
'id'=>$this->pdo->lastInsertId()
];
}
//读取数据
public function read($fileds='*',$where='',$limit='0,10')
{
$this->fileds=$fileds;
$this->where=empty($where) ? '':' WHERE '. $where;
$this->limit=$limit;
$sql='SELECT '.$this->fileds.' FROM '.$this->table.$this->where.' LIMIT '.$this->limit;
$stmt=$this->pdo->prepare($sql);
$stmt->execute();
// print_r($stmt->debugDumpParams());
//返回得到二维数组
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
//更新数据
public function update($data,$where)
{
//难点是set参数处理 使用array_keys可以拿到键
$keyArr=array_keys($data);
//准备用来存放条件
$set='';
foreach ($keyArr as $value){
$set.=$value.'=:'.$value.',';
}
//trim 可以去除前后空格 rtrim(var,'指定字符') 可以取除右边指定字符 ltrim(var,'指定字符')取左指定字符
$set=rtrim($set,',');
$sql='UPDATE '.$this->table.' SET '.$set.' WHERE '.$where ;
$stmt=$this->pdo->prepare($sql);
$stmt->execute($data);
//返回更新的数量
return $stmt->rowCount();
}
//删除数据
public function delete($where)
{
$sql='DELETE FROM '.$this->table.' WHERE '.$where ;
$stmt=$this->pdo->prepare($sql);
$stmt->execute();
// die($stmt->debugDumpParams());
//返回删除的数量
return $stmt->rowCount();
}
}
//--------------------------提供数据库信息和实例化
//实例化DB
$dsn='mysql:host=127.0.0.1;dbname=music';
$username='root';
$password='root';
$table='musics';
$db=new DB($dsn,$username,$password,$table);
//--------------------------添加数据
//新增操作
$data=[
'name'=>'谢谢你的爱',
'images'=>'ldh.jpg',
'lyric'=>'不要问我一生曾经爱过多少人
你不懂我伤有多深
要剥开伤口总是很残忍
劝你别作痴心人
多情暂且保留几分
不喜欢孤独
却又害怕两个人相处
这分明是一种痛苦
在人多时候最沈默
笑容也寂寞
在万丈红尘中
啊
找个人爱我
泪开始坠落
是不敢不想不应该
再谢谢你的爱
我不得不存在
啊
像一颗尘埃
还是会带给你伤害
是不敢不想不应该
再谢谢你的爱
我不得不存在
啊
在你的未来
最怕这样就是带给你永远的伤害
不喜欢孤独
却又害怕两个人相处
这分明是一种痛苦
在人多时候最沉默
笑容也寂寞
在万丈红尘中
啊
找个人爱我
当我避开你的柔情后
泪开始坠落
是不敢不想不应该
再谢谢你的爱
我不得不存在
啊
像一颗尘埃
还是会带给你伤害
是不敢不想不应该
再谢谢你的爱
我不得不存在
啊
在你的未来
最怕这样就是带给你永远的伤害
',
'mus_url'=>'http://music.xx***/music_id=1',
'classify'=>1,
'mus_play'=>'因版权原因暂停在线播放'
];
$res=$db->create($data);
echo '成功新增了'.$res['count'].'条记录,新增的记录的ID是:'.$res['id'];
echo '
';
//-------------------------查询数据 无条件查询
//foreach ($db->read() as $key => $value){
// print_r($value);echo '
';
//};
//echo '
';
//-------------------------查询数据 限制返回字段 和条件
foreach ($db->read('mus_id,name,classify','','0,3') as $key => $value){
print_r($value);echo '
';
};
echo '
';
//-------------------------更新操作
$data=[
'mus_play'=>'因版权原因暂停在线下载',
'images'=>'dzq.jpg',
];
$where='mus_id=18';
echo '成功更新了:'.$db->update($data,$where).'条记录';
echo '
';
//-------------------------更新操作
$where='mus_id=24';
echo '成功删除了:'.$db->delete($where).'条记录';
运行实例 »
点击 "运行实例" 按钮查看在线实例