自动加载机制,抽象类,接口学习及 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'));