Correction status:qualified
Teacher's comments:语法不难, 难在灵活运用, 这涉及很多编程技巧 与思维模式
1 写一个抽象类并继承它, 内容自定
<?php //抽象类 abstract class Car { //抽象属性 protected $brand; public function __construct($brand = 'Rolls-Royce') { $this->brand = $brand; } public function getBrand() { return $this->brand; } // 抽象方法 abstract public function setBrand($value); } class Stu extends Car { //构造方法不会继承 public function __construct($brand) { parent::__construct($brand); } //抽象累中定义的抽象方法必须在子类中实现 public function setBrand($value) { $this->brand = $value; } } $obj = new Stu('Rolls-Royce'); echo '汽车***之一:' . $obj->getBrand() . '<br />'; $obj = new Stu('Porsche'); echo '汽车***之一:' . $obj->getBrand() . '<br />'; ?>
点击 "运行实例" 按钮查看在线实例
2 模仿课堂案例,写一个接口实现CURD操作, 并扩展一到二个方法
查询方法截图:
修改数据方法截图:
删除方法截图:
<?php //接口开发实战 // 1、定义接口 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='staff') { $this->pdo = new \pdo($dsn, $user, $pwd); $this->table = $table; } //增加数据 public function create($data) { //字段列表 $fields = ' (name, age, sex,position, mobile, hiredate) '; //值列表 $values = ' (:name, :age, :sex, :position, :mobile, :hiredate) '; //创建SQL语句 $sql = 'INSERT INTO '.$this->table.$fields. ' VALUES ' . $values; //pdo执行 $stmt = $this->pdo->prepare($sql); $stmt->execute($data); return [ 'count' => $stmt->rowCount(), 'id' => $this->pdo->lastInsertID() ]; } //读取数据 public function read($fields='*',$where='',$limit='0,5') { //设置条件 $where = empty($where) ? '' : ' WHERE ' . $where; //设置显示数量 $limit = ' LIMIT ' . $limit; //创建sql查询语句 $sql = 'SELECT ' . $fields . ' FROM ' . $this->table . $where . $limit; //pdo执行 $stmt = $this->pdo->prepare($sql); $stmt->execute(); //返回结果 return $stmt->fetchAll(\PDO::FETCH_ASSOC); } //修改数据 public function update($data,$where2) { //设置查询字段 $Arr = array_keys($data); $set = ''; foreach($Arr as $value){ $set .= $value . ' =:' . $value . ', '; } $set = rtrim($set, ', '); //创建SQL语句 $sql = 'UPDATE ' . $this->table . ' SET ' . $set . ' WHERE ' . $where2; //die($sql); //PDO执行 $stmt = $this->pdo->prepare($sql); $stmt->execute($data); //返回结果 return $stmt->rowCount(); } //删除数据 public function delete($where3) { //构建sql语句 $sql = 'DELETE FROM ' . $this->table . ' WHERE ' . $where3; //pdo执行 $stmt = $this->pdo->prepare($sql); $stmt->execute(); //返回结果 return $stmt->rowCount(); } } //客户端代码 $dsn = 'mysql:host=127.0.0.1;dbname=staff'; $user = 'root'; $pwd = 'root'; $db = new Db($dsn, $user, $pwd); //新增数据 // $data = [ // 'name' => '大神', // 'age' => 99, // 'sex' => 1, // 'position' => '救世主', // 'mobile' => '400111111', // 'hiredate' => time() // ]; // $res = $db->create($data); // echo '成功新增了:' . $res['count'] . '条记录,新增的记录的主键ID是:' . $res['id']; //查询数据 $fields = ' name as 姓名,age as 年龄 '; $where = ' age>30 '; $limit = '0,20'; //遍历查询 foreach ($db->read($fields,$where,$limit) as $item){ print_r($item); echo '<br />'; } //修改数据 $data =[ 'age' => 40, 'position' => '神经大侠' ]; $where2 = 'staff_id = 18'; echo '成功更新了:' . $db->update($data,$where2) . ' 条记录'; echo '<hr>'; //删除 $where3 = 'staff_id = 20'; echo '成功删除了:' . $db->delete($where3) . ' 条记录'; ?>
点击 "运行实例" 按钮查看在线实例
小结:
1、抽象类:不能实例化,定义的抽象方法必须在子类中实现
抽象定义方法:
abstract class Name
{
abstract public function setSub( );
}
class sub extends Name
{
// ...
}
2、接口:接口是类的模板、类是对象的模板、对象是类的实例,接口大boss。
interface name { //... }
class sub implements name { //... }
3、抽象类、接口,语法理解简单,但是实操写方法等都需要强大的逻辑理解能力,多写多实操。