批改状态:合格
老师批语:代码不用截图, 图片应该是运行效果
抽象类为什么要用抽象类,字面理解,就是只拿来当父类的类,应该给它定义成抽象类,不允许实例分离,抽象类分离了设计与实现 认为父类是设计类,子类是工作类。意有的时候父类分离了部分代码,有些还是依靠父类来完成在父类中,尽可能的使用protected 属性.来完成封装.
注意:在父类[设计类]中这么去写虽然没有错,但是按照程序的设计来说,这么写就是不对的,我们应该在抽象类中只保留一些抽象方法,让子类[工作类]来完成父类的工作!而不是如上图那样,在设计类中把活儿都干完了!这么是不对滴!

接口的概念:完全的分离了“设计与实现”;
interface 关键字,专门声明接口![单接口];接口里面的方法都是abstract的,不需要加abstract关键字接口里面所有成员的访问控制都是public接口中不需要属性,但允许常量存在,定义在接口中的常量,一般统称为:接口常量,接口常量不允许被修改。接口还可以有接口的构造方法;
既然接口定义好了,那我们就需要实现它的类;[工作类]
接口中 访问接口中常量的方式是以:接口名::常量名
接口与抽象类+mysql实战代码加深理解
<?php#接口的应用场景3: 用抽象类实现接口;interface iDbbase{//新增public static function insert($db,$data);//修改public static function update($db,$optoins);//查询public static function select($db,$optoins=[]);//删除public static function delete($db,$where);}#实现类抽象类来充当abstract class aDb implements iDbbase{#抽象类充当接口实现类时,不用必须实现接口中的方法;#当实现类中的方法中有一些公共操作时,可以将这些操作放在中间的抽象类中实现`#使用单例模式来连接 创建类的唯一实例;protected static $db = null;public static function connect($dsn,$username,$password){if(is_null(self::$db)){//如果当前连接对象是null,表示还没有连接数据库self::$db=new PDO($dsn,$username,$password);}return self::$db;}}class Db extends aDb{#插入:public static function insert($db,$data){if(!is_array($data)){die('非法参数,请检查后在输');}foreach($data as $value){$new[] =$value;}$sql = 'INSERT INTO `users` (`name`,`age`,`email`) VALUES(?,?,?)';$stmt = $db->prepare($sql);$stmt->execute($new);}//查询public static function select( $db, $optoins=[] ){return $db->query("SELECT * FROM `users` LIMIT 2")->fetchALL(PDO::FETCH_ASSOC);}//修改public static function update($db,$optoins){foreach($optoins as $value){$new[] =$value;}$sql= "UPDATE `users` set `name`=?,`age`=?,`email`=? where `id`=?";$stmt = $db->prepare($sql);$stmt->execute($new);}//删除public static function delete($db,$where){$sql = 'DELETE FROM `users` where `id`=?';$stmt = $db->prepare($sql);$stmt->execute([$where]);}}$config = ['type' => $type ?? 'mysql','host' => $host ?? 'localhost','dbname' => $table ?? 'phpedu','charset' => $charset ?? 'utf8','port' => $port ?? '3306','username' => $username ?? 'root','password' => $password ?? '123456'];$dsn =sprintf('%s:host=%s;dbname=%s;',$config['type'],$config['host'],$config['dbname']);$username =$config['username'];$password =$config['password'];$db=Db::connect($dsn,$username,$password);//insert操作$data=['name'=>'李四','age' =>100,'email' =>'163@.com'];Db::insert($db,$data);//查询操作 不带条件的.// foreach(Db::select($db) as $user){// print_r($user);// }//修改$optoins=['name'=>'四','age' =>200,'email' =>'222@.com','id' =>4];Db::update($db,$optoins);//删除$where= 11;Db::delete($db,$where);

在这里的话,需要引用的时候,就使用trait来将类打包成一个零件,,用use关键字导入即可!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号