批改状态:合格
老师批语:很多知识 , 望文生义, 所谓抽象就是不具体, 不能直接拿来用, 理解这点, 也就记住了
1. 写一个抽象类并继承它, 内容自定
abstract: 定义抽象方法/抽象类
类中只要有一个抽象方法, 该类就应该声明为抽象类
抽象类只能被继承,不能实例化,并且抽象方法必须在子类实现
实现抽象方法的子类方法可见性不能低于抽象方法原定义
抽象方法是public, 子类方法只能是public
抽象方法是protected, 子类方法只能是protected/public
****
类中只要有一个成员设置为抽象,该类就必须设置抽象类
一个类一旦被设置为抽象类,就具备了二个特点:
不能实例化
类中抽象方法,在子类中必须实现(全部),就是子类必须有父类的抽象方法
注意:
属性设置为抽象无意义, 抽象仅针对方法,类
子类的成员可见性必须等于或高于所继承的抽象类成员可见性,例如抽象类是proteced,子类可以是protected/pulic
子类重写的抽象方法可见性,究竟用protected/pulic, 要看这个子类是最终被客户端访问,如果是就public,如果不是protected
级别:
public 级别最高: A
protected 级别中等: B
private 级别最低: C

2.模仿课堂案例,写一个接口实现CURD操作, 并扩展一到二个方法





<?php
namespace _1015;
interface iCURD
{
// 增加数据
public function create($data);
// 读取数据
public function read();
// 更新数据
public function update($data,$where);
// 删除数据
public function delete($where);
}
// 创建DB类,实现iCURD接口,完成基本的数据库操作
class DB implements iCURD
{
// 数据库的连接对象
protected $pdo = null;
// 数据表
protected $table;
// 构造方法:连接数据库,并设置默认的数据表名称
public function __construct($dsn,$user,$pwd,$table='task')
{
$this->pdo= new \PDO($dsn,$user,$pwd);
$this->table=$table;
}
// 增加数据
public function create($data)
{
//字段列表
$fields = ' (name,age,sex,position,mobile,hiredate,display) ';
//值列表
$values = ' (:name, :age, :sex, :position, :mobile, :hiredate,:display)';
//创建SQL
$sql = 'INSERT INTO ' . $this->table.$fields. ' VALUES ' . $values;
$stmt = $this->pdo->prepare($sql);
$stmt->execute($data);
return [
//行数总和
'count' => $stmt->rowCount(),
// 最后插入的id
'id' => $this->pdo->lastInsertId()
];
}
//读取数据
public function read($fields = '*',$where='display=1',$limit='6,13')
{
//设置条件
$where = empty($where) ? '' : ' WHERE ' . $where;
//设置显示数量
$limit= ' LIMIT ' . $limit;
$sql = 'SELECT ' . $fields . ' FROM ' . $this->table. $where.$limit;
$stmt = $this->pdo->prepare($sql);
$stmt->execute();
return $stmt->fetchAll(\PDO::FETCH_ASSOC);
}
//更新数据
public function update($data,$where)
{
$keyArr=\array_keys($data);
$set= '';
foreach ($keyArr as $value ) {
$set .= $value . ' =:' .$value.', ';
}
$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();
return $stmt->rowCount();
}
}
// // 客户端代码
$dsn = 'mysql:host=127.0.0.1;dbname=test';
$user = 'root';
$pwd = 'root';
$db= new DB($dsn ,$user , $pwd);
// foreach ($db->read() as $item ) {
// \print_r($item); echo '<br>';
// }
echo '<hr>';
//增加数据
// $data = [
// 'name' =>'郭靖',
// 'age' =>999,
// 'sex' =>1,
// 'position' =>'射雕英雄',
// 'mobile' =>88888888888,
// 'hiredate' =>\time(),
// 'display' =>1
// ];
// $res = $db->create($data);
// echo '<span style="color:#eb6100">成功增加了:' . $res['count'] .'条记录,'.'</span>'. '<span style="color:#0f7884">新增的主键ID是:'.$res['id'].'</span>';
// echo '<br><span style="color:#662a00">' ;
// foreach ($db->read() as $item ) {
// \print_r ($item); echo '<br>';
// }
// echo '</span>';
// 更新数据
// $data = [
// 'age' =>9999,
// 'position' =>'抗金英雄'
// ];
// $where = 'task_id = 80';
// echo '<br>';
// echo '<span style="color:#eb6100">成功更新了:' . $db->update($data,$where) .'条记录,'.'</span>';
// echo '<br><span style="color:#662a00">' ;
// foreach ($db->read() as $item ) {
// \print_r ($item); echo '<br>';
// }
// echo '</span>';
// 删除
// $where = 'task_id=11';
// echo '成功删除了:' . $db->delete($where) . ' 条记录';
$data = [
'display' =>0
];
$where = 'position = \'射雕英雄\'';
echo '成功清空了:' . $db->update($data,$where). ' 条记录';
echo '<br>';
echo '<br><span style="color:red">' ;
foreach ($db->read() as $item ) {
\print_r ($item); echo '<br>';
}
echo '</span>';点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号