博主信息
博文 62
粉丝 7
评论 2
访问量 74148
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
Trait 组合与接口
我是郭富城
原创
808人浏览过

Trait 组合与接口

1.Trait 组合的同名方法的命名冲突

  • insteadof替换
  • as改名

    as高级用法修改访问控制

  1. <?php
  2. trait trait1
  3. {
  4. public function eat()
  5. {
  6. echo '朱老师是一个吃货吗?';
  7. }
  8. }
  9. trait trait2
  10. {
  11. public function eat()
  12. {
  13. echo '朱老师不是吃货';
  14. }
  15. }
  16. class Nicola
  17. {
  18. use trait1,trait2
  19. {
  20. trait1::eat insteadof trait2;
  21. trait2::eat as eaten;
  22. }
  23. }

2.在 trait 中改变 trait 成员的访问控制

  • as高级用法,可以修改 trait 中成员的访问控制
  1. <?php
  2. //trait
  3. trait trait1
  4. {
  5. public function eat()
  6. {
  7. echo '朱老师是一个吃货吗?';
  8. }
  9. }
  10. trait trait2
  11. {
  12. public function eat()
  13. {
  14. echo '朱老师不是吃货';
  15. }
  16. }
  17. class Nicola
  18. {
  19. //修改访问权限
  20. // use trait1 {eat as protected;}
  21. //修改别名
  22. use trait1 {
  23. eat as eat1;
  24. }
  25. }
  26. $nicola = new Nicola;
  27. echo $nicola->eat();
  28. echo '<hr>';
  29. echo $nicola->eat1();

3.trait 实现接口方法的优缺点是什么?

  • trait 的出现就像一个小三,能够促进家庭的和谐发展一样,可以横向的在多个家庭间穿梭,大家都喜欢使用。同样,实现接口中定义的抽象方法,而不是通过工作类去实现,展示在用户面前的就只是简单的一个 trait 的引用,代码不仅简单,维护起来也方便。
  • 至于缺点我觉得应该就是他优点本身带来的缺点吧。Trait 和 Class 相似,但仅仅旨在用细粒度和一致的方式来组合功能。 无法通过 trait 自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用的几个 Class 之间不需要继承。

4.实例演示 trait 与接口,抽象类联合编程

  • 年终奖抽奖
  1. <?php
  2. //trait和接口的组合
  3. //年终奖抽奖
  4. $prices = ['单车', '摩托', '宝马', '法拉利', '直升机', '战斗机'];
  5. // 接口
  6. interface iKey
  7. {
  8. // 随机抽奖
  9. public static function generateId(int $min, int $max): int;
  10. }
  11. // trait: 真实实现目的
  12. trait tCreateId
  13. {
  14. public static function generateId(int $min, int $max): int
  15. {
  16. return mt_rand($min, $max);
  17. }
  18. }
  19. // 工作类
  20. class DrawPrize implements iKey
  21. {
  22. use tCreateId;
  23. public static function choujiang(array $prices, int $id)
  24. {
  25. return $prices[$id];
  26. }
  27. }
  28. //员工开始抽奖
  29. $id = DrawPrize::generateId(0, 5);
  30. $price = DrawPrize::choujiang($prices, $id);
  31. printf('恭喜你!你的年终奖品是: <span style="color:red">%s</span>', $price);

总结

Trait 是为类似 PHP 的单继承语言而准备的一种代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用 method。Trait 和 Class 组合的语义定义了一种减少复杂性的方式,避免传统多继承和 Mixin 类相关典型问题。

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

批改状态:合格

老师批语: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+教程免费学