批改状态:合格
老师批语:看来你之前学了一个假对象
4月30日作业
Trait组合的同名方法的命名冲突的解决方案有哪些, 实例进行演示
演示如何在trait中改变trait成中的访问控制
trait 实现 接口方法的优点是什么? 分析一下有什么缺点(选做)
实例演示一个trait与接口,抽象类联合编程(如果实在想不出案例, 可以写出思路也行, 但绝对不允许抄课堂案例, 你懂的)
答:当trait同名的时候,有两种办法解决:
一种是把一个同名的替换,语法是insteadOf
另一种是用别名as,特别注意的是,as 还可以修改trait成员的访问控制
两种命名冲突的解决方案和trait中改变trait中的访问控制的方法演示如下:
trait tceshi{public function ceshi(){return __TRAIT__ . ' => ' . __METHOD__;}}trait tceshi2{public function ceshi(){return __TRAIT__ . ' => ' . __METHOD__;}}trait tceshi3{use tceshi, tceshi2 {// 1. 替代tceshi::ceshi insteadOf tceshi2;// 2. 别名tceshi2::ceshi as td2;}// 演示如何在trait中改变trait成中的访问控制,原来是public,直接改成了protecteduse tceshi {ceshi as protected td1;}}// 工作类class Work{use tceshi3;}
trait 实现接口的方法优点个人觉得是方便客户调用(trait就像软件的小插件?),估计以后框架中,会很多trait呀接口呀这种东西。相当于接口和trait都是集成的东西(实现某种功能)像积木一样,客户拿来直接就可以拼装了用了,直接实现一些客户想实现的功能,而且也便于团队协作使用同样的功能。省的张三使用一个功能就一点一点写一个,李四想要同样功能,也一点一点重复写一个。而是集成在那里,谁用谁就调用就可以了。个人拙见不知道对不对。
缺点暂时不知道,希望老师解惑。
皇上选妃案例
<?php//选妃案例$girls = ['西施', '东施', '李师师', '贾玲', '貂蝉', '如花'];// 接口interface iCreateId{// 删选出唯一妃子public static function generateId(int $min, int $max):int;}// trait: 实现选妃方法trait createId{public static function generateId(int $min, int $max):int{return mt_rand($min, $max);}}// 实现今晚翻牌规则class DrawPrize implements iCreateId{use createId;public static function fanpan(array $girls, int $id){return $girls[$id];}}//皇上开始选$id = DrawPrize::generateId(0,5);$Tonight = DrawPrize::fanpan($girls, $id);printf('皇上!今晚侍寝的是: <span style="color:red">%s</span>', $Tonight);
从trait开始正式进入天书模式,大量所学的知识扑面而来,以前的知识不牢固造成了头脑中很多问号。我靠,太恐怖了,好久没有想哭的感觉了。感觉快跟不上了。从来没这么焦虑过。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号