Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:创建这么多的层给, 就是想让代码写得优雅
和改变访问控制方法
<?php
// 解决trait组合中的方法命名冲突
trait tPrint1
{
public function printer()
{
return __TRAIT__ . ' => ' . __METHOD__;
}
}
trait tPrint2
{
public function printer()
{
return __TRAIT__ . ' => ' . __METHOD__;
}
}
trait tPrint3
{
use tPrint1,tPrint2
{
// 解决trait中同名函数冲突的方法:1.替换 intsteadof
tprint1::printer insteadOf tprint2;
// 2.别名 as
tPrint2::printer as tp2;
// 3.用as改变访问控制
// tPrint2::printer as protected tp2 ;
}
}
// 工作类
class Work
{
use tPrint3;
}
// 客户端
echo (new Work)->printer(),'<br>';
echo (new work)->tp2();
实例效果
初步思路:
1.创建一个接口
2.创建工作类
3.创建一个trait,实现接口方法
然后~
实在难为我了,为了不影响5月1日的作业,只好先提交半成品,日后补充。
总结:
1.trait组合同名函数冲突解决方法:
替换——insteadof
别名/改变访问控制——as
2.trait 实现接口方法的优点:把原先在工作类中实现的接口抽象方法,间接在trait中实现,给客户的工作类更加简洁。