Blogger Information
Blog 9
fans 0
comment 0
visits 5865
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
抽象类与DB类的操作扩展--2019年10月9日
错过博客
Original
522 people have browsed it

抽象类


什么是抽象类?

定义

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

Correction status:qualified

Teacher's comments:你的获取字段和判断是否存在字段的方式有问题, 想一下为什么?
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post