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

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

程序员文章站 2022-03-11 13:42:16
...

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'));