博主信息
博文 43
粉丝 1
评论 0
访问量 43216
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP trait与接口、抽象类联合编程
蔚蓝世纪
原创
851人浏览过

一、trait组合同名方法命名冲突的解决方案

trait组合如果出现同名方法,可以选择下面三种方法来解决。
  1. 替换:使用 insteadof 操作符来明确指定使用冲突方法中的哪一个。
  2. 别名:使用as操作符为同名中的其中一个方法引入别名。注意,as 操作符不是对方法进行重命名,也不会影响其方法。
  3. 修改trait成员的访问控制。
如:
  1. trait tH1
  2. {
  3. public function ds()
  4. {
  5. return $name = '100-apples';
  6. }
  7. }
  8. trait tH2
  9. {
  10. public function ds()
  11. {
  12. return $name = '100-apples';
  13. }
  14. }
  15. trait tH3
  16. {
  17. use tH1, tH2 {
  18. tH1::ds insteadOf tH2;//指定用tH2的方法
  19. tH2::ds as nd2;//指定tH在执行时使用td2这个名字
  20. }
  21. use tH1 {ds as public td1;}//还可以修改trait成员的访问控制,但是public若修改为protected则会出现错误
  22. }
  23. class myclass
  24. {
  25. use tH3;
  26. }
  27. $myclass = new myclass();
  28. echo $myclass->ds();
  29. echo '<hr>';
  30. echo $myclass->nd2();
  31. echo '<hr>';
  32. echo $myclass->td1();
输出:

二、修改trait成中的访问控制

  1. trait He {
  2. public function fHe() {
  3. echo '我和我的祖国!';
  4. }
  5. }
  6. class MyC1 {
  7. use He;
  8. }
  9. // 修改 sayHello 的访问控制
  10. class MyC2 {
  11. use He { fHe as protected; }//因为可见性变为受保护,所以打印不出
  12. }
  13. // 给方法一个改变了访问控制的别名
  14. class MyC3 {
  15. use He { fHe as private prifHe; }//因为可见性变为私有,所以打印不出
  16. }
  17. $MyC1 = new MyC1();
  18. $MyC2 = new MyC2();
  19. $MyC3 = new MyC3();
  20. echo $MyC1->fHe();
  21. echo $MyC2->fHe();
  22. echo $MyC3->fHe();

三、trait实现接口方法的优点

  1. 减少了代码的复杂性。
  2. 弥补了PHP单继承的缺陷。
  3. 单个trait可以有多个trait组成。
  4. 在单个class中,可以使用多个trait
四、trait实现接口方法的缺点
  1. trait会覆盖调用类继承的父类方法。
  2. trait无法像Class一样使用new实例化。

五、trait与接口、抽象类联合编程实践

制作变色方块的思路:

  1. html做方块。
  2. CSS设置样式。
  3. 定义一个接口,生成唯一的ID
  4. trait实现接口方法。
  5. 定义一个类class来继承接口。
  6. xplode将颜色分配给方块。
  7. 点击鼠标刷新页面,方块会翻转并且变色。(觉得这个小实验如果用JS会不会更方便实现呢?)

总结

真切地感受到什么叫做“眼高手低”,一方面是因为知识还没有学完全,另一方面想的出来却做不出来,真是捉急呀。后面专门发一篇博文来补上这个小实践。复习去。

批改老师:天蓬老师天蓬老师

批改状态:合格

老师批语:是不是一开始觉得php应该比较简单就选了它, 现在发现之前学了一个假php , 其实一门编程语言,成为生产力工具, 一定有它的过人之处的... 加油
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

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

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学