批改状态:合格
老师批语:面向对象中最核心最难的部分都在这里了, 理解这些, 可以从顶层看这个问题
Demo: 使用接口实现多继承// 接口1interface Itf1{public function func1();public static function func2();}// 接口2interface Itf2{public const CONST1 = '我是接口声明的常量';}// 实现类/* 多继承 */class Demo1 implements Itf1, Itf2{public function func1(){return '我是' . __METHOD__;}public static function func2(){return '我是' . __METHOD__;}public static function getConst(){return self::CONST1;}}// 客户端调用/* 获取接口常量 */echobr(Demo1::getConst());/* 调用接口声明的方法 */echobr((new Demo1)->func1());echobr(Demo1::func2());/*result:我是接口声明的常量我是Demo1::func1我是Demo1::func2*/
extends关键字, 接口定义时, 可以继承多个其他接口
/** Demo2: 定义接口时, 继承另外的接口 */interface Itf3 extends Itf1, Itf2{// 啥也不做, 就继承Itf1和Itf2两个接口}// 实现类class Demo2 implements Itf3{public function func1(){return '我是' . __METHOD__;}public static function func2(){return '我是' . __METHOD__;}public static function getConst(){return self::CONST1;}}// 客户端调用/* 获取接口常量 */echobr(Demo2::getConst());/* 调用接口声明的方法 */echobr((new Demo2)->func1());echobr(Demo2::func2());/*result:我是接口声明的常量我是Demo2::func1我是Demo2::func2*/
/** Demo3: */// 抽象类abstract class AbsDemo implements Itf3{/* 只实现func1方法 */public function func1(){return '我是' . __METHOD__;}/* func2方法留着由实现类来实现 */abstract public static function func2();}// 实现类class Demo3 extends AbsDemo{public static function func2(){return __METHOD__ . '方法, 由' . __CLASS__ . '实现';}}// 客户端调用/* 获取接口常量 */echobr(Demo3::CONST1);/* 调用接口声明的方法 */echobr((new Demo3)->func1());echobr(Demo3::func2());/*result:我是接口声明的常量我是AbsDemo::func1Demo3::func2方法, 由Demo3实现*/
// Demo4: 接口允许的成员interface Itf4{// 1. 常量public const CONST1 = '我是接口声明的常量';// 2. 抽象方法/* 普通抽象方法 */public function func1();/* 静态抽象方法 */public static function func2();// 3. 构造方法public function _construct();}
trait关键字定义trait
/** Demo1: 定义trait, trait允许的成员 */trait Trait1{// 普通成员/* 使用trait的类中不能有同名属性, 所以一般不在trait中 */public $username = 'zhangsan';public function func1(){return '我是一个普通的方法';}// 静态成员public static $message = '有内奸, 终止交易';public static function func2(){return '我是一个静态方法';}// 抽象成员/* 普通抽象成员 */public $param;abstract public function func3();/* 静态抽象成员 */public static $staticParam;abstract public static function func4();}
// 打招呼的traittrait Trait2{public static function sayHi(){return '你好, 我是' . __CLASS__;}}// 使用trait的类class Demo4{// 使用trait, 相当于把trait中定义的成员复制粘贴到使用类中use Trait2;}// 客户端调用echobr(Demo4::sayHi());/*result:你好, 我是Demo4*/
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号