Correction status:qualified
Teacher's comments:你的获取字段和判断是否存在字段的方式有问题, 想一下为什么?
抽象类
什么是抽象类?
定义
只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类
抽象类也要使用“abstract”关键字来修饰;在抽象类里面可以有不是抽象的方法和成员属性
但只要有一个方法是抽象的方法,这个类就必须声明为抽象类,使用”abstract”来修饰。
什么是抽象方法?
类里面定义的没有方法体的方法就是抽象方法
在方法声明的时候没有大括号以及其中的内容,而是直接在声明时在方法名后加上分号结束,另外在声明抽象方法时还要加一个关键 字“abstract”来修饰
抽象类注意点
抽象类不能被实例化
子类必须把父类中的抽象方法全部都实现,否则子类中还存在抽象方法,那么子类还是抽象类,还是不能实例化类
<?php namespace demo; //抽象类Demo //该类有abstract关键字声明 //该类中中abstrct声明的抽象方法get() abstract class Demo { //抽象属性name protected $name; public function __construct($name = '张三') { $this->name = $name; } public function get($value) { echo '该类中的抽象属性'.$value.'的值为:'.$this->name; } //抽象方法set abstract public function set($value); } //Demo2类继承抽象类Demo //nameDemo2类中必须要实现Demo类的中所有抽象的方法,否则Demo2类不能实例化 class Demo2 extends Demo { public function __construct($name) { parent::__construct($name); } public function set($value) { $this->name=$value; } } $obj=new Demo2('张三'); echo $obj->get('name').'<hr>'; $obj->set('李四'); echo '经过set方法更改值后:'.'<br>'; echo $obj->get('name');
DB类扩展方法
<?php namespace demo; //curd接口 interface iCurd { public function create($data); public function delete($where); public function update($data,$where); public function select(); } class DB implements iCurd { protected $pdo = null; protected $table; public function __construct($dsn,$user,$pwd,$table) { $this->pdo = new \PDO($dsn, $user, $pwd); $this->table = $table; } public function create($data) { $fields = ' (name, momey, info) '; $values = ' (:name, :momey, :info) '; $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 delete($where) { $sql = 'DELETE FROM ' .$this->table . ' WHERE ' .$where; $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->rowCount(); } 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 select($fields='*',$where='',$limit='0,5') { //设置条件 $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); } /** * 获取数据表中字段值集合 * @return array */ public function get_fields() { $fields = []; $sql="SHOW COLUMNS FROM {$this->table}"; $stmt = $this->pdo->prepare($sql); $stmt->execute(); $fields=[]; foreach ($stmt->fetchAll(\PDO::FETCH_ASSOC) as $v){ $fields[]=$v['Field']; } return $fields; } /** * 判断字段在数据表中时候存在 * @param $field 需判断的字段值 * @return string */ public function field_exists($field) { $fields = $this->get_fields($this->table); return in_array($field, $fields)?'字段'.$field.'存在':'不存在'; } } $dsn='mysql:host=127.0.0.1;dbname=demo'; $user='root'; $pwd='root'; $table='test'; $db=new DB($dsn,$user,$pwd,$table); echo '<pre>'; var_dump($db->create(['name'=>'张三','momey'=>'8888','info'=>'测试张三'])); //var_dump($db->field_exists('name'));