博客列表 >抽象类与DB类的操作扩展--2019年10月9日

抽象类与DB类的操作扩展--2019年10月9日

错过博客
错过博客原创
2019年10月12日 15:00:31521浏览

抽象类


什么是抽象类?

定义

只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类
抽象类也要使用“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'));

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议