继承抽象类、 模仿案例,写一个接口实现CURD操作, 并扩展方法-1009
程序员文章站
2022-03-20 23:13:40
...
先是抽象类的继承:
实例
<?php abstract class k { //抽象属性 public $c; //初始化 public function __construct($c=30){ $this->c=$c; } //方法 public function kk(){ return $this->c; } //签名 abstract public function setC($value); } class k2 extends k { public function __construct($c){ parent::__construct($c); } public function setC($value) { $this->c=$c; } } $k2 = new k2(666666); echo '值:'.$k2->kk(); ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
写CURD案例:并拓展了一个加法:
实例
<?php namespace _1009; interface iCurd { // 增加数据 public function create($data); // 读取数据 public function read(); // 更新数据 public function update($data, $where); // 删除数据 public function delete($where); } // 创建Db类, 实现iCurd接口,完成基本的数据库操作 class Db implements iCurd { //拓展 public static $a; public static $m; // 数据库的连接对象 protected $pdo = null; // 数据表 protected $table; //拓展的方法 public static function k($m,$a) { return "{$m}+{$a}=".($m+$a); } // 构造方法: 实例化时连接数据库,并设置默认的数据表名称 public function __construct($dsn, $user, $password, $table='ying') { $this->pdo = new \PDO($dsn, $user, $password); $this->table = $table; } // 增加数据 public function create($data) { // 字段列表 $fields = ' (name, image, detail) '; // 值列表 $values = ' (:name, :image, :detail) '; // 创建SQL $sql = 'INSERT INTO '.$this->table.$fields. ' VALUES ' . $values; $stmt = $this->pdo->prepare($sql); $stmt->execute($data); return [ 'count' => $stmt->rowCount(), 'id' => $this->pdo->lastInsertId() ]; } // 读取数据 public function read($fields='*', $where='', $limit='0, 11') { //设置条件 $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=chubu'; $user = 'root'; $password = 'root'; $db = new Db($dsn, $user, $password); //遍历 foreach ($db->read() as $item) { print_r($item); echo '<br>'; } echo '<hr>'; echo Db::k(10,66); //新增 $data = [ 'name' => '天气之子', 'image'=>'77.jpg', 'detail'=>'牺牲一人就可以改变天气的故事' ]; $res = $db->create($data); echo '成功的新增了: '. $res['count'].' 条记录,新增的记录的主键ID是: ' . $res['id']; echo '<hr>'; //更新 $data = [ 'image' => '6666.jpg', 'detail'=>'很好看' ]; $where = 'mov_id = 12'; echo '成功的更新了: ' . $db->update($data, $where) . ' 条记录'; //删除 $where = 'mov_id = 12'; echo '成功的删除了: ' . $db->delete($where) . ' 条记录'; ?>
运行实例 »
点击 "运行实例" 按钮查看在线实例
相关截屏:
查找并有一个拓展减法:
对于抽象的理解:和之前学习的方法相比就是没有写完的方法,没有具体实现,没有值
对于用接口写CURD,和前一天用链式调用数据库查询放在一起理解就很好理解,独自写还差火候。