博客列表 >Trait使用案例

Trait使用案例

phpcn_u202398
phpcn_u202398原创
2020年05月03日 21:54:49633浏览

1、trait同名方法冲突解决方案

  • 使用 insteadof 操作符来明确指定使用冲突方法中的哪

  • as 操作符可以 为某个方法引入别名。

    注意as 操作符不会对方法进行重命名,也不会影响其方法

    代码实例
    1. <?php
    2. //trait组合的同命名方法解决方案
    3. trait tUser1
    4. {
    5. public function getName(){
    6. return $name = "李明";
    7. }
    8. }
    9. trait tUser2
    10. {
    11. public function getName()
    12. {
    13. return $name = "李华";
    14. }
    15. }
    16. trait tUser3
    17. {
    18. use tUser1,tUser2 {
    19. tUser1::getName insteadOf tUser2;
    20. //
    21. tUser2::getName as tU2;
    22. }
    23. }
    24. //工作类
    25. class Infor {
    26. use tUser3;
    27. }
    28. $infor = new Infor();
    29. echo $infor -> getName();
    30. echo"<hr>";
    31. echo $infor -> tU2();
    32. ?>

    2、trait改变trait成员的访问控制

    代码实例
  1. <?php
  2. //trait组合的同命名方法解决方案
  3. trait tUser1
  4. {
  5. public function getName(){
  6. return $name = "李明";
  7. }
  8. }
  9. trait tUser2
  10. {
  11. public function getName()
  12. {
  13. return $name = "李华";
  14. }
  15. }
  16. trait tUser3
  17. {
  18. use tUser1,tUser2 {
  19. tUser1::getName insteadOf tUser2;
  20. tUser2::getName as tU2;
  21. }
  22. //修改访问控制
  23. use tUser1{getName as private tU1;}
  24. }
  25. //工作类
  26. class Infor {
  27. use tUser3;
  28. }
  29. $infor = new Infor();
  30. echo $infor -> tU1();
  31. echo"<hr>";
  32. echo $infor -> tU2();
  33. ?>

3、trait的优缺点

  • 优点:代码复用

  • 缺点:由于一个类里面可以引入多个trait,很可能会出现多个trait里面命名冲突的问题

4、trait与接口

代码实例
  1. <?php
  2. //接口
  3. interface iUser1
  4. {
  5. public static function getName();
  6. }
  7. //实现接口
  8. trait tUser1
  9. {
  10. public static function getName(){
  11. return $name="李明" ;
  12. }
  13. }
  14. //工作类
  15. class Infor implements iUser1{
  16. use tUser1;
  17. public static function getSex(){
  18. return $sex = "男";
  19. }
  20. }
  21. $sex = Infor::getSex();
  22. $infor = new Infor();
  23. echo $infor -> getName()."-->" . $sex ;
  24. ?>

学习总结

本节课我们学习trait的使用,通过本节课的学习了解了同一个类中引用多个trait同名冲突的解决方案以及trait访问控制的改变。本节课学习的不足之处在于对trait、接口和抽象类的混合编程理解的不透彻,导致想不出具体的案例,在以后的教学中多注意观察和实践解决这些遗留问题。

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议