Correction status:qualified
Teacher's comments:抽象类就是一个半成品, 部分实现接口而已, 所以不能直接用
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来定义,接口定义的方法都需要该接口下面的类来实现。