博客列表 >自动加载机制,抽象类,接口学习及 CURD接口类实现

自动加载机制,抽象类,接口学习及 CURD接口类实现

小星的博客
小星的博客原创
2019年11月20日 23:19:511064浏览

1. 自动加载

当我们在一个文件中需要访问另一个文件中的类或者方法时,都需要先引入该文件才可以进行下一步操作,但这往往会比较繁琐,因此可以利用一下自动加载机制。

在引入一个文件时,格式一帮如下:

include __DIR__.'/inc/Test1.php';

这里主要是对路径的处理,需要通过对类名的处理拼接成对应的路径。

$path = __DIR__.'/'.str_replace('\\','/',\inc\Test1::class).'php';

找到文件和类名的对应关系后就可以用自动加载技术来加载类文件,使用 spl_autoload_register() 方法。

<?php
namespace day1009;

// 找到文件和类名的对应关系后就可以用自动加载技术来加载类文件
// 自动加载类文件
// 可以看成是一个触发器,调用类就会自动触发该方法,将对应类文件引入
spl_autoload_register(function($className){
    include(__DIR__.'/'.str_replace('\\','/',$className.'.php'));
});

echo \inc\Test2::get();

2. 抽象类

<?php
/**
 * 抽象类
 */

namespace day1009;
// 抽象类

// 1. 抽象类不能实例化
// 2. 抽象类中定义的抽象方法必须在子类中实现

// 声明抽象类
abstract class Father{
    public $name;
    public $age;

    public function __construct($name,$age)
    {
        $this->name = $name;
        $this->age = $age;
    }
    // 因为有抽象方法,所以类需要声明为 abstract
    // 抽象方法不能有具体实现
    abstract public function getName();

    abstract public function setAge($value);
}

class Son extends Father {
    public $name;
    public $sex;

    // public function __construct($name,$age,$sex)
    // {
    //     parent::__construct($name,$age);
    //     $this->sex = $sex;
    // }

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

    public function setAge($age)
    {
        $this->age = $age;
    }
    public function setSex($sex)
    {
        $this->sex = $sex;
    }
}



$obj = new Son('Tom',10,'female');
// $obj->setAge(1000);
echo $obj->sex;

3. 接口实现CURD操作

接口的概念:接口是类的模板,类是接口的实现

用 interface 关键字声明类

类用 implements 关键字继承接口

接口类中声明的方法必须在子类中实现

<?php
/**
 * 增改删查接口类
 */

namespace nsql;

interface Curd
{
    // 接口中方法必须都是 public

    public function read($fields, $where, $limit);

    public function create($data);

    public function update($where,$data);

    public function delete($where);
}

class Db implements Curd
{
    protected $pdo = null;
    protected $table;

    public function __construct($dsn, $username, $password, $table = 'staff')
    {
        $this->pdo = new \PDO($dsn, $username, $password);
        $this->table = $table;
    }

    // 查询
    public function read($fields, $where, $limit = 5)
    {
        $fields = empty($fields) ? '*' : $fields;
        $where = empty($where) ? '' : ' WHERE ' . $where;
        $limit = empty($limit) ? '' : ' LIMIT ' . $limit;
        $sql = 'SELECT ' . $fields . ' FROM ' . $this->table . $where . $limit;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return $stmt->fetchAll(\PDO::FETCH_ASSOC);
    }

    // 新增
    public function create($data)
    {
        $fields = ' (name, age, sex, position, mobile, hiredate) ';
        $values = '(:name, :age, :sex, :position, :mobile, :hiredate)';
        $sql = 'INSERT INTO '.$this->table.$fields.' VALUES '.$values;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);
        return [
            'count' => $stmt->rowCount(),
            'lastId' => $this->pdo->lastInsertId()
        ];
    }

    // 更新
    public function update($where,$data)
    {
        $where = empty($where) ? '' : ' WHERE '.$where;
        $set = ' SET ';
        $keyArr = array_keys($data);
        foreach ($keyArr as $value) {
            $set .= $value.' = :'.$value.',';
        }
        $set = rtrim($set,',');
        $sql = 'UPDATE '.$this->table.$set.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($data);
        return  '更新了'.$stmt->rowCount().'条数据';
    }

    // 删除
    public function delete($where)
    {
        $where = empty($where) ? '' : ' WHERE '.$where;
        $sql = 'DELETE FROM '.$this->table.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return  '删除了'.$stmt->rowCount().'条数据';
    }

    // 更新实现软删除
    public function softdelete($where)
    {
        $where = empty($where) ? '' : ' WHERE '.$where;
        $set = ' SET is_del = 1';
        $sql = 'UPDATE '.$this->table.$set.$where;
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute();
        return  '软删除了'.$stmt->rowCount().'条数据';
    }
}

$db = new Db('mysql:host=127.0.0.1;dbname=zmx', 'root', 'root');
$res = $db->read('name,age', 'sex=0', 5);
foreach ($res as $value) {
    print_r($value);
}

// 新增
$data = [
    'name'=>'Jack',
    'age' => 30,
    'sex' => 1,
    'position' => 'c',
    'mobile' => '1231313',
    'hiredate' => '232323'
];
print_r($db->create($data));

// 更新
$data = [
    'age' => 10,
    'sex' => 0,
];
print_r($db->update('staff_id = 9', $data));

// 删除
// print_r($db->delete('staff_id = 11'));
print_r($db->softdelete('staff_id = 9'));


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