博客列表 >抽象类和接口的定义和使用-------2019.10.09

抽象类和接口的定义和使用-------2019.10.09

刂艹亻的博客
刂艹亻的博客原创
2019年10月12日 17:00:36701浏览

抽象类的定义和使用

php抽象类定义关键字 abstract

抽象方法是没有方法体的方法,没有方法体是指方法声明时没有花括号以及其中的内容,而是声明方法时直接在方法名后加上分号结束,声明抽象方法要使用abstract关键字修饰。声明抽象方法格式:abstract function();

抽象类中的方法不能自己去实现,需要靠子类中去实现
1. 抽象类不能实例化
2. 抽象类中定义的抽象方法必须在子类中实现

实例

<?php
//抽象类
namespace _1009;
//php抽象类定义关键字 abstract
abstract class Person1
{

    //抽象类中的属性
    protected $name;
//抽象方法是没有方法体的方法,没有方法体是指方法声明时没有花括号以及其中的内容,而是声明方法时直接在方法名后加上分号结束,声明抽象方法要使用abstract关键字修饰。声明抽象方法格式:abstract function();
// 签名, 抽象方法
    public function __construct($name = '雄')
    {
        $this->name = $name;
    }
    abstract public function getName();

    abstract public function setName($value);
}
//抽象类中的方法不能自己去实现,需要靠子类中去实现
//1. 抽象类不能实例化
//2. 抽象类中定义的抽象方法必须在子类中实现
class Stus extends Person1
{

    public function getName()
    {
        return $this->name;
    }
    public function setName($value)
    {
        $this->name = $value;
    }
}

$stu = new Stus('熊猫');
echo $stu->getName();
echo '<hr>';
$stu->setName('北极熊');
echo $stu->getName();

运行实例 »

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

接口的定义和使用

定义接口类 ,关键字 interface

实现接口 ,关键字 implements

实例

<?php
namespace _1009;

//定义接口类 ,关键字 interface
interface Book
{
    //设置书名
    public function bookName($bookName);
    //设置作者
    public function bookZuoZhe($bookZuoZhe);

}

//实现接口 ,关键字 implements
class Read implements Book
{
    public $bookName;
    public $bookZuoZhe;

    //实现接口里面的方法
    public function bookName($bookName)
    {
        $this->bookName = $bookName;
    }

    //实现接口里面的方法
    public function bookZuoZhe($bookZuoZhe)
    {
        $this->bookZuoZhe = $bookZuoZhe;
    }

    public function getXinxi()
    {
        return '《'.$this->bookName.'》'.'作者:'.$this->bookZuoZhe;
    }
}

//客户端代码调用
$obj = new Read();
$obj->bookName('三体');
$obj->bookZuoZhe('刘念慈');
echo $obj->getXinxi();

运行实例 »

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

使用接口--实例演示数据库的curd操作

实例

<?php
namespace _1009;

//接口实战
interface iCurd
{
    //增加数据
    public function create($data);

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

    //更新数据
    public function update($data,$where);

    //删除数据
    public function delete($where);

}

//创建工作类,实现接口方法
class Db implements iCurd
{
    //数据库的连接对象
    protected $pdo = null;

    //表名
    protected $table;

    //构造方法连接数据库
    public function __construct($dsn, $user, $pwd, $table = 'staff')
    {
        //保存实例化后的pdo对象
        $this->pdo = new \PDO($dsn, $user, $pwd);
        //设置表名
        $this->table = $table;

    }

    //添加数据
    public function create($data)
    {
        // TODO: Implement create() method.
        // 字段列表
        $fields = ' (name, age, sex,position, mobile, hiredate) ';
        // 值列表
        $values = ' (:name, :age, :sex, :position, :mobile, :hiredate) ';
        //创建sql语句
        $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 read($fields = '*',$where='',$limit='0,5')
    {
        //设置条件
        $where = empty($where) ? '' : ' WHERE ' . $where;

        // 设置显示数量
        $limit = ' LIMIT ' . $limit;

//        拼接sql语句
        $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)
    {
        // 字段列表
        $keys = array_keys($data);
        $set = '';
        foreach ($keys as $value) {
            $set .= $value . ' = :' . $value. ', ';
        }
        $set = rtrim($set, ', ');
        //创建sql语句
        $sql = 'UPDATE '.$this->table . ' SET '.$set.' WHERE '.$where;

        //预处理语句
        $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();
    }
}
$dsn = 'mysql:host=127.0.0.1;dbname=chen';
$user = 'root';
$password = 'root';
$obj= new Db($dsn,$user,$password);
//$data = [
//    'name' => '万剑一',
//    'age' => 29,
//    'sex' => 1,
//    'position' => '祖传悲剧男',
//    'mobile' => '1389998899',
//    'hiredate' => time()
//];
//$res = $obj->create($data);
//echo '成功的新增了: '. $res['count'].' 条记录,新增的记录的主键ID是: ' . $res['id'];
//查询
foreach($obj->read() as $value){
    print_r($value); echo '<br>';
}
echo '<hr>';
//修改
//$data = [
//    'name' => '张小凡',
//    'position' => '悲剧男二号'
//];
//print_r($obj->update($data,'staff_id = 16'));

//删除
//echo $obj->delete('staff_id = 16');

运行实例 »

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


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