Correction status:qualified
Teacher's comments:想过为什么不要继承父类的构造方法吗?
1.抽象类继承
<?php /** * * @authors Alfred (jusheng_yao@outlook.com) * @date 2019-10-13 19:01:49 * @version 1.0 */ // 抽象类 //1. 抽象类不能实例化 //2. 抽象类中定义的抽象方法必须在子类中实现 //3. 如果子类定义了构造函数,父类的构造函数不会被调用,如果需要,构造函数中要写 parent::__construct(); abstract class People { // 抽象属性 protected $name; public function __construct($name = 'Alfred') { $this->name = $name; } public function getName() { return $this->name; } // 签名, 抽象方法 abstract public function setName($value); } class Person extends People { //构造方法不会继承 public function __construct($name) { parent::__construct($name); } //抽象类中定义的抽象方法必须在子类中实现 public function setName($value) { $this->name = $value; } } $person = new Person('轻狂书生'); echo '网游中的一个重要角色是: ' . $person->getName() . '<br>'; $person->setName("残雪飞戈"); echo 'Alfred 的QQ网名是: ' . $person->getName() . '<br>'; ?>
点击 "运行实例" 按钮查看在线实例
2.数据库接口
接口放置空方法,DB类实现具体逻辑,如增删改查、条件、限制、字段域、默认数据库参数属性等等
<?php /** * * @authors Alfred (jusheng_yao@outlook.com) * @date 2019-10-13 20:53:31 * @version 1.0 */ // 接口,类的模板 interface MySQL { // 增加数据 public function create($data); // 读取数据 public function read(); // 更新数据 public function update($data, $where); // 删除数据 public function delete($where); } // 类,接口的实现 /** * mysql CURD操作 */ class SQLAction implements MySQL { // 数据库连接参数 protected $settings = [ 'type' => 'mysql', 'host' => 'localhost', 'dbname' => 'tests', 'username' => 'root', 'password' => '123456', ]; // 数据库的连接对象 protected $pdo = null; // 数据表 protected $table; // 字段 public $field = '*'; // 条件 public $where; // 数量 public $limit; // 构造方法: 连接数据库,并设置默认的数据表名称 function __construct($dsn, $user, $password, $table = 'staff') { $default_dsn = "{$this->settings['type']}:host={$this->settings['host']};dbname={$this->settings['dbname']}"; $dsn = empty($dsn) ? $default_dsn : $dsn; $user = empty($user) ? $this->settings['username'] : $user; $password = empty($password) ? $this->settings['password'] : $password; $this->pdo = new PDO($dsn, $user, $password); $this->table = $table; } // 增加数据 public function create($data) { // 字段列表 $fields = ' (name, age, sex,position, mobile, hiredate) '; // 值列表 $values = ' (:name, :age, :sex, :position, :mobile, :hiredate) '; // 创建SQL - INSERT INTO TABLE FIELDS VALUES (...) $sql = 'INSERT INTO ' . $this->table . $fields . ' VALUES ' . $values; echo $sql . '<br>'; $stmt = $this->pdo->prepare($sql); $stmt->execute($data); return [ 'count' => $stmt->rowCount(), 'id' => $this->pdo->lastInsertId(), ]; } // 读取数据 public function read($fields = '*', $where = '', $limit = '0, 5') { // 设置字段 $this->field = empty($fields) ? (empty($this->field) ? '*' : $this->field) : $fields; //设置条件 $this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where; // 设置显示数量 $this->limit = $limit === '0, 5' ? (empty($this->limit) ? ' LIMIT ' . $limit : $this->limit) : $limit; // 创建SQL - SELECT FIELDS FROM TABLE WHERE (...) LIMIT ... $sql = 'SELECT ' . $this->field . ' FROM ' . $this->table . $this->where . $this->limit; echo $sql . '<br>'; $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, ', '); // 设置条件 $this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where; // 创建SQL - UPDATE TABLE SET ... WHERE (...) $sql = 'UPDATE ' . $this->table . ' SET ' . $set . $this->where; echo $sql . '<br>'; $stmt = $this->pdo->prepare($sql); $stmt->execute($data); return $stmt->rowCount(); } // 删除数据 public function delete($where) { // 设置条件 $this->where = empty($where) ? (empty($this->where) ? '' : $this->where) : ' WHERE ' . $where; // 创建SQL - DELETE FROM TABLE WHERE (...) $sql = 'DELETE FROM ' . $this->table . $this->where; echo $sql . '<br>'; $stmt = $this->pdo->prepare($sql); $stmt->execute(); return $stmt->rowCount(); } // fields字段域 public function field($fields = '*') { $this->field = empty($fields) ? '*' : $fields; echo $this->field . '<br>'; return $this; } // where条件 public function where($where = '') { $this->where = empty($where) ? $where : ' WHERE ' . $where; echo $this->where . '<br>'; return $this; } // limit 数量限制 public function limit($limit) { $this->limit = empty($limit) ? $limit : ' LIMIT ' . $limit; echo $this->limit . '<br>'; return $this; } } // 客户端的代码 $dsn = 'mysql:host=127.0.0.1;dbname=tests'; $user = 'root'; $password = '123456'; $db = new SQLAction($dsn, $user, $password); // 遍历1 foreach ($db->read() as $item) { print_r($item); echo '<br>'; } echo 'field: ' . $db->field . '<br>'; echo 'where: ' . $db->where . '<br>'; echo 'limit: ' . $db->limit . '<br>'; echo '<hr>'; // 遍历2 $db->field('staff_id,name,position,mobile') ->where('staff_id > 2') ->limit(8); foreach ($db->read() as $item) { print_r($item); echo '<br>'; } echo 'field: ' . $db->field . '<br>'; echo 'where: ' . $db->where . '<br>'; echo 'limit: ' . $db->limit . '<br>'; echo '<hr>'; // 新增 $data = [ 'name' => '郭靖', 'age' => 29, 'sex' => 1, 'position' => '金刀驸马', 'mobile' => '1389998899', 'hiredate' => time(), ]; $res = $db->create($data); echo '成功的新增了: ' . $res['count'] . ' 条记录,新增的记录的主键ID是: ' . $res['id'] . '<br>'; echo 'field: ' . $db->field . '<br>'; echo 'where: ' . $db->where . '<br>'; echo 'limit: ' . $db->limit . '<br>'; echo '<hr>'; // 更新 // $data = [ // 'age' => 40, // 'position' => '抗金英雄' // ]; // $where = 'staff_id = 11'; // echo '成功的更新了: ' . $db->update($data, $where) . ' 条记录' . '<br>'; // echo 'field: ' . $db->field . '<br>'; // echo 'where: ' . $db->where . '<br>'; // echo 'limit: ' . $db->limit . '<br>'; // echo '<hr>'; // 删除 // $where = 'staff_id = 11'; // echo '成功的删除了: ' . $db->delete($where) . ' 条记录' . '<br>'; // echo 'field: ' . $db->field . '<br>'; // echo 'where: ' . $db->where . '<br>'; // echo 'limit: ' . $db->limit . '<br>'; // echo '<hr>';
点击 "运行实例" 按钮查看在线实例