博主信息
博文 8
粉丝 0
评论 1
访问量 14527
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
trait命名冲突解决、trait中改变trait成员中的访问控制、trait与接口,抽象类混合编程
混混
原创
1005人浏览过

1.Trait组合的同名方法的命名冲突的解决方案,以及访问的权限修改

关键字:insteadOf 替换; as 取别名或者修改权限;
实例演示:

  1. <?php
  2. trait tUser1
  3. {
  4. public function res()
  5. {
  6. return __TRAIT__.'=>'.__METHOD__;
  7. }
  8. }
  9. trait tUser2
  10. {
  11. public function res()
  12. {
  13. return __TRAIT__.'=>'.__METHOD__;
  14. }
  15. }
  16. trait tUser3
  17. {
  18. use tUser1,tUser2
  19. {
  20. tUser1::res insteadOf tUser2;//替换 tUser2 里面的res方法
  21. tUser2::res as res2;//给res 取一个别名
  22. }
  23. use tUser1{res as protected res1;}//修改tUser 方法的访问权限
  24. }
  25. class User
  26. {
  27. use tUser3;
  28. }
  29. $obj=new User();
  30. echo $obj->res();
  31. echo '<hr>';
  32. echo $obj->res2();
  33. echo '<hr>';
  34. echo $obj->res1();
  35. ?>

输出结果:

个人理解:在取别名使用前,一定要先替换,不然会报错。之前在框架中直接使用as,不知道是不是在框架中有封装 insteadOf。

2.trait与抽象类、接口混合编程

实例演示:

  1. <?php
  2. interface iUser1
  3. {
  4. const NAME='刘德华';
  5. const AGE=17;
  6. public static function res();
  7. public static function ret($age2);
  8. }
  9. trait tUser1
  10. {
  11. public static function res()
  12. {
  13. return iUser1::NAME.iUser1::AGE.'出道';
  14. }
  15. }
  16. abstract class tUser2 implements iUser1
  17. {
  18. // use tUser1;
  19. public static function ret($age2)
  20. {
  21. // $age2=24;
  22. return $age2.'获取金像奖';
  23. }
  24. }
  25. class User extends tUser2
  26. {
  27. Use tUser1;
  28. }
  29. $obj=new User();
  30. echo $obj::res();
  31. echo '<hr>';
  32. echo $obj::ret(24);
  33. ?>

输出结果:

个人总结:接口中声明方法;需要实现直接在抽象类或者trait类中实现,工作类中直接调用就好,注意引入的关系和层级

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

批改状态:合格

老师批语:trait虽好,也不可滥用
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学