抽象类
什么是抽象类?
定义
只要一个类里面有一个方法是抽象方法,那么这个类就要定义为抽象类
抽象类也要使用“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').'
';
$obj->set('李四');
echo '经过set方法更改值后:'.'
';
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 '
';
var_dump($db->create(['name'=>'张三','momey'=>'8888','info'=>'测试张三']));
//var_dump($db->field_exists('name'));