继承抽象类、 模仿案例,写一个接口实现CURD操作, 并扩展方法-1009

2019年11月10日 18:57:10阅读数:436博客 / 风吹的博客 / php

先是抽象类的继承:

实例

<?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();

?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

抽象.png

写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) . ' 条记录';
?>

运行实例 »

点击 "运行实例" 按钮查看在线实例

相关截屏:

新增.png新增1.png

更新.png更新1.png

删除.png删除1.png

查找并有一个拓展减法:

查并有拓展方法.png

对于抽象的理解:和之前学习的方法相比就是没有写完的方法,没有具体实现,没有值

对于用接口写CURD,和前一天用链式调用数据库查询放在一起理解就很好理解,独自写还差火候。


批改状态:合格

老师批语:作业才写到这里, 看来得加速了

版权申明:本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!

全部评论

文明上网理性发言,请遵守新闻评论服务协议

条评论
  • 博主信息
    风吹的博客
    博文
    23
    粉丝
    0
    评论
    0
    访问量
    14622
    积分:0
    P豆:50