批改状态:合格
老师批语:trait非常好玩的, 一定要掌握
<?php// 接口的使用场景2 :多接口继承// 接口可以突破php类的继承限制,允许多继承,实现多层级的接口// 创建第一个接口interface api_1{const NAME = 'michael';}// 第二个继承第一个interface api_2 extends api_1{const AGE = 25;}// 第三个继承前两个interface api_3 extends api_1 ,api_2{// 接口抽象方法public function user();}// 实现接口类// 因为上面的接口api_3已经继承了前两个,所以这里只写api_3即可,当然也支持加上 ’api_1,api_2‘class Name implements api_3{// 先实现抽象方法public function user(){return '姓名:'.api_3::NAME;}}echo (new Name)->user();
//trait 功能与语法 PHP5.4+ 实现代码的复用//trait 与抽象类,接口 一样不能被实例化,只能嵌入到宿主类中使用//trait 是一个特殊类:只能使用 常规 静态 抽象 不能用类常量trait tDemo{// 常规属性protected $name = 'michael';//常规方法public function getName(){return $this->name;}// 静态属性public static $sex = '男';//静态方法public function getSex(){return self::$sex;}// 抽象属性public static $age;// 抽象方法abstract public static function setAge();}//创建工作类引用class Demo{use tDemo;public static function setAge(){return self::$age;}}//访问Demo::$age = 30;echo Demo::setAge();echo '<hr>';$demo = new Demo();echo '姓名'.$demo->getName().'年龄:'.Demo::setAge().'性别'.Demo::getSex();
<?php//trait 功能1 代码复用//创建一个公共方法库trait Means{// 乘法public function Way_1($a,$b){return $a*$b;}// 除法public function Way_2($a,$b){return $a/$b;}// 加法public function Way_3($a,$b){return $a+$b;}// 减法public function Way_4($a,$b){return $a-$b;}}//实现类class White{use Means;}//创建类示例$white = new White;//乘法echo $white->Way_1(2,8).'<hr>';//除法echo $white->Way_2(8,2).'<hr>';//加法echo $white->Way_3(2,8).'<hr>';//减法echo $white->Way_4(8,2).'<hr>';//输出 16 4 10 6
trait 在继承上下文环境中,具有优先级,通过优先设置,降低单继承的影响
优先级比较 当前类 > trait > 当前类的父类
trait 中只写方法不要写属性,否则会跟宿主类中的同名属性发生冲突产生致命错误
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号