Blogger Information
Blog 43
fans 1
comment 0
visits 33935
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP trait与接口、抽象类联合编程
蔚蓝世纪
Original
652 people have browsed it

一、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会不会更方便实现呢?)

总结

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

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:是不是一开始觉得php应该比较简单就选了它, 现在发现之前学了一个假php , 其实一门编程语言,成为生产力工具, 一定有它的过人之处的... 加油
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post