批改状态:合格
老师批语:先把语法搞懂吧, 编程思路与项目经验有关, 不可能一蹴而就的
声明关键字:
interface
语法和类相似: 抽象方法, 常量, 构造方法
所有方法都是抽象方法
访问控制必须是public
接口: 完全分离了” 设计(抽象类中完成)与实现(工作类中完成)
实现接口关键字:implements
突破php类的继承限制,实现多继承(多层级)
接口成员有:
接口常量、接口方法、构造方法
单接口:
<?php// 接口使用场景1: 单接口interface iActor{// 接口常量const NATION = '中国';// 接口方法: 都是抽象方法public function resume();}// 工作类实现接口class Lending implements iActor{protected $name = '张小哥';// 接口中的抽象方法,必须在工作类实现public function resume(){return $this->name . ' 的国籍是: ' . iActor::NATION;}}// 客户端$lending = new Lending;echo $lending->resume();
效果图:

接口多继承:
<?php// 接口多层级继承interface iName{// 接口常量const NAME1 = '张三丰';}interface iSchool{// 接口常量const SCHOOL1 = '武当';}interface iNfor{// 接口方法public function in();}// 实现类class User implements iName, iSchool, iNfor{public function in(){return iName::NAME1 . '--->' . iSchool::SCHOOL1 .'<br>';}}echo ( new User)->in();
效果图:

抽象类部分实现接口方法:
<?php// 抽象类部分实现接口方法interface iPerformanc{public function bushi(int $diem, int $base1);public function jishu(int $base);}// 用抽象类只实现接口的一个方法: jishu()abstract class cAlculat implements iPerformanc{public function jishu(int $base){return $base;}}// 工作类class Tinh extends cAlculat{public function bushi(int $diem, int $base){return $hieuqua = $base * 0.6 * (($diem-100)/100);}}// 调用$base = (new Tinh) -> jishu(549);echo '绩效是:' .(new Tinh) -> bushi(116,$base);
效果图:

接口实现多态操作:
<?phpnamespace demo2;//接口实现多态interface iPerformanc{const JISHU = 520;public function cach(int $diem);}// cach tinh bushiclass Bushi implements iPerformanc{public function cach(int $diem){return $jixiao = iPerformanc::JISHU * 0.6 * (($diem-100)/100);}}// cach tinh xuongclass Xuong implements iPerformanc{public function cach(int $diem){return $jixiao = iPerformanc::JISHU * 0.8 * (($diem-100)/100);}}// 调用// 计算部窒绩效echo (new Bushi) -> cach(116) .'<br>';// 计算分厂绩效echo (new Xuong) -> cach(116) .'<br>';
效果图:

调用关键字:
use
声明关键词:trait
trait里面可以有:静态成员,抽象成员,普通成员;不能使用常量。
trait内的属性会和调用它的类内的同名的属性冲突:
优先顺序:当前类成员 > trait类成员 > 基类成员
一个类可以继承多个trait, 通过逗号相隔
trait不能在接口中使用
实例演示代码:
<?php// trait: 间接实现横向多继承trait myTrait{public static $name = '我是: Trait中的属性';}class Tinhluong{public static function in() {return '父类方法: Tinhluong';}}class Tinhson extends Tinhluong{use myTrait;public static function in() {return '子类方法: Tinhson';}}echo Tinhluong::in() .'<br>';echo Tinhson::$name .'<br>';echo Tinhson::in() .'<br>';
实例演示效果图:

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号