Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:看来你之前学了一个假对象
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,直接改成了protected
use 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开始正式进入天书模式,大量所学的知识扑面而来,以前的知识不牢固造成了头脑中很多问号。我靠,太恐怖了,好久没有想哭的感觉了。感觉快跟不上了。从来没这么焦虑过。