批改状态:合格
老师批语:抽象类就是一个半成品, 部分实现接口而已, 所以不能直接用
1、写一个抽象类并继承它, 内容自定
<?php
namespace _1009task1;
abstract class sum
{
abstract public function sum($a,$b);
abstract protected function getInfo();
}
class child extends sum
{
public function sum($a,$b){
return $a+$b;
}
public function getInfo(){
return __class__.'类中的'.__METHOD__.'被调用了';
}
}
$obj=new child;
echo $obj->sum(3,4),'<hr>';
echo $obj->getInfo();
?>运行结果:

2、 模仿课堂案例,写一个接口实现CURD操作, 并扩展一到二个方法
<?php
namespace _1009task2;
//数据库操作接口;
interface iCurd
{
// 增加数据
public function insert($data);
// 查询数据
public function select();
// 修改数据
public function update($data,$where);
//删除数据
public function delete($where);
}
class db_operation implements iCurd
{
protected $pdo=null; // 设置连接对象
protected $table; // 数据表名称
// 构造方法:连接数据库并设置操作的表名
public function __construct($dsn,$name,$pwd,$table='staff')
{
$this->pdo=new \PDO($dsn,$name,$pwd);
$this->table=$table;
}
// 增加数据
public function insert($data){
// sql语句:INSERT INTO TABLE 字段1,字段2,。。。 VALUE 值1,值2,。。。
$fields=' (name, age, sex, position, mobile, hiredate) ';// 字段列表
$values=' (:name, :age, :sex, :position, :mobile, :hiredate) ';// 值列表
$sql = 'INSERT INTO '.$this->table.$fields.' VALUES '.$values;// sql语句拼接
$stmt=$this->pdo->prepare($sql);// 预处理
if($stmt->execute($data)){ // 判断sql语句是否执行成功
if($stmt->rowCount()>0){ // 判断是否插入了数据
return '插入了'.$stmt->rowCount().'条数据,最后一条主键为:'.$this->pdo->lastInsertId();
}else{
die('<pre>' . print_r($stmt->errorInfo(), true));
}
}
}
// 查询数据
public function select($field='*',$where='',$limit=''){
// SQL语句:SELECT 字段 FROM 表名 WHERE 条件 LIMIT 查询条数
$fields = empty($fields) ? ' * ' : $fields; //字段设置
$where=empty($where) ? '' : ' WHERE '. $where; //条件设置
$limit = empty($limit) ? '' : ' LIMIT '.$limit;//查询条数设置
$sql = ' SELECT '. $field . ' FROM '.$this->table . $where . $limit; //拼接SQL语句
$stmt = $this->pdo->prepare($sql); //预处理
$stmt->execute();
$results=$stmt->fetchAll(\PDO::FETCH_ASSOC);
foreach ($results as $result){
print_r($result);echo '<br>';
}
}
// 修改数据
public function update($data,$where){
// SQL语句:$sql=UPDATE 表名 SET 字段1=值1,字段2=值2,。。。 WHERE 条件
$keyArray = array_keys($data); //将数组$data中的键保存在数组$keyArray中
$set = '';
foreach($keyArray as $kvalue){
$set .= $kvalue . ' = :'. $kvalue . ', ';
}
$set = rtrim($set,', ');
if(!empty($where)){
$where = ' WHERE '.$where;
$set = rtrim($set,', '); //删除$set值最右侧的空格与预定的', '字符
$sql = ' UPDATE ' . $this->table. ' SET ' .$set.$where; //sql语句拼接
$stmt = $this->pdo->prepare($sql); //预处理
$stmt->execute($data); //绑定参数并执行
return $stmt->rowCount();
}else{
return '不允许无条件更新。';
}
}
//删除数据
public function delete($where){
//SQL语句:DELETE FROM 表名 WHERE 条件
if(!empty($where)){
$where = ' WHERE '.$where;
$sql = 'DELETE FROM ' .$this->table.$where;
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->rowCount();
}else{
return '不允许无条件删除。';
}
}
}
$dsn='mysql:host=127.0.0.1;dbname=video;';
$name='root';
$pwd='root';
$db=new db_operation($dsn,$name,$pwd); //创建数据库操作对象
// 查询操作
$fields=' name,age,position ';
$where =' age>40 ';
$limit = ' 3 ';
$db->select($fields,$where,$limit);
echo '<hr>';
// 新增操作
$data = [
'name' => 'Kobe',
'age' => 42,
'sex' => 1,
'position' => '篮球运动员',
'mobile' => 18823452369,
'hiredate' => time()
];
$result=$db->insert($data);
echo $result;
echo '<hr>';
// 更新操作
$data = [
'age'=>24
];
$where = 'staff_id = 13';
echo $db->update($data,$where);
echo '<hr>';
// 删除操作
$where = ' staff_id>37 ';
echo $db->delete($where);
?>运行结果:

小结::
抽象类:当一个类中具有抽象成员(主要指具有抽象方法,属性一般是抽象的),该类就成为了一个抽象类,需要用abstract关键字来定义。
接口:接口是类的抽象集合,接口中所有属性都是抽象的,不需要关键字abstract,只需要interface来定义,接口定义的方法都需要该接口下面的类来实现。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号