博客列表 >Trait 方法冲突时,调用优先级问题

Trait 方法冲突时,调用优先级问题

笑看风云
笑看风云原创
2019年12月04日 16:55:341005浏览
  1. <?php
  2. trait MyTrait
  3. {
  4. public function getInfo()
  5. {
  6. echo '我是 Trait 中的方法';
  7. echo '<hr>';
  8. }
  9. }
  10. class Father
  11. {
  12. use MyTrait;
  13. public function getInfo()
  14. {
  15. echo '我是 Father 中的 getInfo 方法';
  16. echo '<hr>';
  17. }
  18. }
  19. class Child extends Father
  20. {
  21. use MyTrait;
  22. public function getInfo()
  23. {
  24. echo '我是 Child 中的 getInfo 方法';
  25. echo '<hr>';
  26. }
  27. }
  28. $obj = new Child;
  29. $obj->getInfo();
  • 如果 父类 子类 和 trait 定义了相同的方法,那么调用的优先级为:
  • 子类 > trait > 父类
  • 为什么呢?
  • 1、子类 extends 父类时,继承了 getInfo() 方法;
  • 2、子类 use MyTrait 时,继承了 MyTrait 中的 getInfo() 方法,从而覆盖了父类的 getInfo() 方法;
  • 3、子类自定义了 getInfo() ,从而覆盖了 MyTrait 中的 getInfo() 方法
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议