批改状态:合格
老师批语:非常认真, 一路学过来, 不容易
命名冲突解决办法:1.
insteadOf重命名; 2.as别名
在trait中改变trait成员的访问控制as
演示Trait命名冲突的解决和改变trait成员的访问控制:
<?php// 解决trait组合中的方法命名冲突trait tDemo1{public function show(){echo 'trait: tDemo1; 方法: show';}}trait tDemo2{public function show(){echo 'trait: tDemo2; 方法: show';}}// 创建一个trait引用上面两个traittrait tDemo3{use tDemo1, tDemo2 {// 1. 替代: 没有了tDemo1::show insteadOf tDemo2;// 2. 别名: 换个名字,两个都还在tDemo2::show as showtd2;}// as: 修改trait成员的访问控制use tDemo1 {show as protected showtd1;}}// 工作类class Lamviec{use tDemo3;}// 客户端$lamviec = new Lamviec();// 调用的是tDemo1的方法$lamviec->show();echo '<hr>';// 调用的是tDemo1的方法$lamviec->showtd2();echo '<hr>';// 修改tDemo1中方法的访问控制,后不能访问// echo $lamviec->showtd1();
效果图:

间接实现类的横向多继承;可以先把接口中的方法分开trai中实现,然后同时引用多个trait,方便调用,方便维护。
在trait中实现接口方法不能调用抽象类中已经实现过的方法。(如我案例中,想在trait中使用
$base)
<?php// 在接口中声明4个接口方法interface iMeritpay{public function base(int $coban, int $hieuq, int $chucv);public function vanphong (float $diem, int $base);public function sanxuat (float $diemcanhan, float $diemxuong, int $base);public function xuong (float $diem, int $base);}// 抽象类实现base()接口方法abstract class aBase implements iMeritpay{public function base(int $coban, int $hieuq, int $chucv){return $coban + $hieuq + $chucv;}}// 在trait中实现接口的方法trait tVanphong{public function vanphong (float $diem, int $base){return (($diem-100)/100) * $base * 0.6;}}trait tSanxuat{public function sanxuat (float $diemcanhan, float $diemxuong, int $base){return ((($diemcanhan * 0.5 + $diemxuong * 0.5)-100) / 100) * $base * 0.8;}}trait tXuong{public function xuong (float $diem, int $base){return (($diem-100)/100) * $base;}}// 声明一个大的trait引入上面的三个小traittrait tCachtinh{use tVanphong, tSanxuat, tXuong;}// 创建工作类引入trait,就不用再实现接口方法class Tinhra extends aBase{use tCachtinh;}// 客户端调用$tinhra = new Tinhra;$base = $tinhra->base(510, 210, 200);// 计算vanphongecho $tinhra->vanphong(116.8, $base) .'<hr>';// 计算sanxuatecho $tinhra->sanxuat(116.8, 120.31, $base) .'<hr>';// 计算xuongecho $tinhra->xuong(116.8, $base) .'<hr>';
效果图:

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号