一.注意事项
1.抽象类与抽象方法
- 关键字
abstract
:在类/方法最前面加上,则叫抽象类/抽象方法 - 抽象类必须通过它的子类来调用抽象类中的方法
- 抽象方法: 没有实现,只有声明, 子类中必须实现它
2.接口
- 定义一个接口:
interface 接口名
- 在接口中所有成员都是抽象的;
- 接口成员的访问控制必须是public;
- 不允许有属性,但允许有接口常量, 禁止重写;
- 接口还可以有构造方法;
- 接口通过关键字
implements
实现:class 类名 implements 接口名
二.通过接口应用场景: 用抽象类来实现接口,演示简单的增删改查
1.建立数据库配置文件:`config.php
<?php
//主机地址
define("DB_HOST","localhost");
//数据库用户名
define("DB_USER","root");
//数据库密码
define("DB_PASSWORD","root123");
// 数据库型号
define("DB_TYPE","mysql");
// 数据库名称
define("DB_NAME","my_user");
//数据库编码
define('DB_CHARSET', 'utf8');
//数据库端口号
define('DB_PORT', '3306');
//定义PDO的DSN,数据源名,包括主机名,端口号和数据库名称。
define('DSN', DB_TYPE.":host=".DB_HOST.";dbname=".DB_NAME.";charset=".DB_CHARSET);
`
2.演示文件:index.php
<?php
//接口
interface iDbset
{
// 抽象方法
//新增
public static function insert($db,$data);
//查询
public static function select($db,$opt=[]);
//修改
public static function update($db,$opt=[]);
//删除
public static function delete($db,$where);
}
//实现类使用抽象类来充当:中间类
abstract class aDb implements iDbset
{
//初始化连接
// 使用单例模式连接: 创建类的唯一实例,唯一对象
protected static $db =null;
// 抽象类充当接口实现类时, 不用必须实现接口中的抽象方法
// 当实现类中的方法中有一些公共操作时,可以将这些操作放在中间的抽象类中实现它
public static function connet($db,$username,$password)
{
//判断是否连接数据库
if(is_null(self::$db)){
return self::$db = new PDO($db,$username,$password);
}
return self::$db;
}
}
//实现类
class DB extends aDb
{
// //新增
public static function insert($db,$data){
$sql =" INSERT `mu_user` SET `username`=?,`password`=?,`phone`=?";
$stem = $db->prepare($sql);
$stem ->bindParam(1,$data['username']);
$stem ->bindParam(2,$data['password']);
$stem ->bindParam(3,$data['phone']);
// var_dump($data['table']);
$stem->execute();
if($stem->rowCount()){
return "新增:".$stem->rowCount()."条";
}else{
// return "errorInfo :".$stem->errorInfo();
return "新增失败";
}
}
//查询
public static function select($db,$opt=[]){
$sql = "SELECT * FROM `mu_user` WHERE `id`<?";
$stem = $db->prepare($sql);
$id =10;
$stem ->bindParam(1,$id);
$stem->execute();
if($stem->rowCount()){
return $stem ->fetchAll (PDO::FETCH_ASSOC);
}else{
return "未查询到数据";
}
}
//修改
public static function update($db,$opt=[]){
$sql =" UPDATE `mu_user` SET `username`=?,`phone`=? WHERE `id`=?";
$stem = $db->prepare($sql);
$stem ->bindParam(1,$opt['username']);
$stem ->bindParam(2,$opt['phone']);
$stem ->bindParam(3,$opt['id']);
$stem->execute();
if($stem->rowCount()){
return "修改:".$stem->rowCount()."条";
}else{
// return "errorInfo :".$stem->errorInfo();
return "修改失败";
}
}
//删除
public static function delete($db,$where){
$sql =" DELETE FROM `mu_user` WHERE `id`=?";
$stem = $db->prepare($sql);
$stem ->bindParam(1,$where);
$stem->execute();
if($stem->rowCount()){
return "删除:".$stem->rowCount()."条";
}else{
// return "errorInfo :".$stem->errorInfo();
return "删除失败";
}
}
}
//客户端
require "./config.php";
//数据连接
$db = DB::connet(DSN,DB_USER,DB_PASSWORD);
//新增数据
$data=[
'table'=>'my_user',
'username'=>'天性健',
'password'=>md5(654321),
'phone'=>'7256868632'
];
echo DB::insert($db,$data);
echo "<hr>";
//查询
foreach(DB::select($db) as $arr){
echo "ID:".$arr['id'].",姓名:".$arr['username'].",电话:".$arr['phone']."<br>";
}
echo "<hr>";
//编辑id
$data=[
'id'=>18,
'username'=>'大黄蜂',
'phone'=>'11111111'
];
echo DB::update($db,$data);
echo "<hr>";
//删除
echo DB::delete($db,21);
echo "<hr>";