欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

抽象类和接口---2019-10-09

程序员文章站 2022-03-20 22:37:40
...

1、写一个抽象类并继承它, 内容自定

<?php
namespace _1009task1;

abstract class sum
{
    abstract public function sum($a,$b);
    abstract protected function getInfo();
        
}

class child extends sum
{
    public function sum($a,$b){
        return $a+$b;
    }
    public function getInfo(){
        return __class__.'类中的'.__METHOD__.'被调用了';
    }

}

$obj=new child;
echo $obj->sum(3,4),'<hr>';
echo $obj->getInfo();
?>

运行结果:

抽象类和接口---2019-10-09

2、 模仿课堂案例,写一个接口实现CURD操作, 并扩展一到二个方法

<?php
namespace  _1009task2;
//数据库操作接口;
interface iCurd     
{
    // 增加数据
    public function insert($data);

    // 查询数据
    public function select();

    // 修改数据
    public function update($data,$where);
    
    //删除数据
    public function  delete($where);
}

class db_operation implements iCurd
{
    
    protected $pdo=null;    // 设置连接对象
   
    protected $table;       // 数据表名称
    // 构造方法:连接数据库并设置操作的表名
    public function __construct($dsn,$name,$pwd,$table='staff')
    {
        $this->pdo=new \PDO($dsn,$name,$pwd);
        $this->table=$table;
    }
    // 增加数据
    public function insert($data){
        // sql语句:INSERT INTO TABLE 字段1,字段2,。。。 VALUE 值1,值2,。。。
        $fields=' (name, age, sex, position, mobile, hiredate) ';// 字段列表        
        $values=' (:name, :age, :sex, :position, :mobile, :hiredate) ';// 值列表       
        $sql = 'INSERT INTO '.$this->table.$fields.' VALUES '.$values;// sql语句拼接      
        $stmt=$this->pdo->prepare($sql);// 预处理
        if($stmt->execute($data)){      // 判断sql语句是否执行成功
            if($stmt->rowCount()>0){    // 判断是否插入了数据
                return '插入了'.$stmt->rowCount().'条数据,最后一条主键为:'.$this->pdo->lastInsertId();
            }else{
                 die('<pre>' . print_r($stmt->errorInfo(), true));
            }
        }
    }

    // 查询数据
    public function select($field='*',$where='',$limit=''){
        // SQL语句:SELECT 字段 FROM 表名 WHERE 条件 LIMIT 查询条数 
        $fields = empty($fields) ? ' * ' : $fields; //字段设置
        $where=empty($where) ? '' : ' WHERE '. $where; //条件设置
        $limit = empty($limit) ? '' : ' LIMIT '.$limit;//查询条数设置
        $sql = ' SELECT '. $field . ' FROM '.$this->table  . $where . $limit; //拼接SQL语句
        $stmt = $this->pdo->prepare($sql);  //预处理
        $stmt->execute();
        $results=$stmt->fetchAll(\PDO::FETCH_ASSOC);
        foreach ($results as $result){
            print_r($result);echo '<br>';
        }


    }

    // 修改数据
    public function update($data,$where){
        // SQL语句:$sql=UPDATE 表名  SET 字段1=值1,字段2=值2,。。。 WHERE 条件
        $keyArray = array_keys($data);      //将数组$data中的键保存在数组$keyArray中
        $set = '';
        foreach($keyArray as $kvalue){
            $set .= $kvalue . ' = :'. $kvalue . ', ';
        }
        $set = rtrim($set,', ');
        if(!empty($where)){
            $where = ' WHERE '.$where;
            $set = rtrim($set,', ');      //删除$set值最右侧的空格与预定的', '字符
            $sql = ' UPDATE ' . $this->table. ' SET ' .$set.$where;     //sql语句拼接
            $stmt = $this->pdo->prepare($sql);      //预处理
            $stmt->execute($data);      //绑定参数并执行
            return $stmt->rowCount();        
        }else{
            return '不允许无条件更新。';
        }
        
    }

    //删除数据
    public function  delete($where){
        //SQL语句:DELETE FROM 表名 WHERE 条件
        if(!empty($where)){
            $where = ' WHERE '.$where;
            $sql = 'DELETE FROM ' .$this->table.$where;
            $stmt = $this->pdo->prepare($sql);
            $stmt->execute();
            return $stmt->rowCount();
        }else{
            return '不允许无条件删除。';
        }
        
    }
}
$dsn='mysql:host=127.0.0.1;dbname=video;';
$name='root';
$pwd='root';
$db=new db_operation($dsn,$name,$pwd);   //创建数据库操作对象

// 查询操作
$fields=' name,age,position ';
$where =' age>40 ';
$limit = ' 3 ';
$db->select($fields,$where,$limit);
echo '<hr>';


// 新增操作
$data = [
    'name' => 'Kobe',
    'age' => 42,
    'sex' => 1,
    'position' => '篮球运动员',
    'mobile' => 18823452369,
    'hiredate' => time()
];
$result=$db->insert($data); 
echo $result;
echo '<hr>';

// 更新操作
$data = [
    'age'=>24
];
$where = 'staff_id = 13';
echo $db->update($data,$where);
echo '<hr>';

// 删除操作
$where = ' staff_id>37 ';
echo $db->delete($where);
?>

运行结果:

抽象类和接口---2019-10-09

小结::

抽象类:当一个类中具有抽象成员(主要指具有抽象方法,属性一般是抽象的),该类就成为了一个抽象类,需要用abstract关键字来定义。

接口:接口是类的抽象集合,接口中所有属性都是抽象的,不需要关键字abstract,只需要interface来定义,接口定义的方法都需要该接口下面的类来实现。