博主信息
博文 47
粉丝 1
评论 0
访问量 66277
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP - trait命名冲突解决办法及实战小案例
晴天
原创
1228人浏览过

1. trait 命名冲突解决办法

  1. <?php
  2. //trait组合中的方法命名冲突解决办法
  3. trait tDemo1
  4. {
  5. public static function abc()
  6. {
  7. return '名字:123';
  8. }
  9. }
  10. trait tDemo2
  11. {
  12. public static function abc()
  13. {
  14. return '年龄:18';
  15. }
  16. }
  17. trait tDemo3
  18. {
  19. use tDemo1,tDemo2{
  20. // 先替代 然后给别名
  21. tDemo2::abc insteadof tDemo1;
  22. tDemo1::abc as ab;
  23. }
  24. }
  25. class Aname
  26. {
  27. use tDemo3;
  28. }
  29. $aname = new Aname();
  30. echo $aname->ab();

2. trait 与 interface 接口进行组合

  1. <?php
  2. //trait 与 interface 接口进行组合
  3. //创建接口
  4. //判断一下 如果当前没有这个接口 那么创建
  5. if (!interface_exists('iDemo')){
  6. interface iDemo {
  7. // 创建一个静态抽象方法
  8. public static function index();
  9. }
  10. }
  11. //创建trait
  12. //也判断一下
  13. if (!trait_exists('tDemo')){
  14. trait tDemo{
  15. // 实现接口中的index方法
  16. public static function index(){
  17. return __CLASS__.'类嗲用了'.__METHOD__.'方法';
  18. }
  19. }
  20. }
  21. //创建工作类
  22. //也判断一下
  23. if (!class_exists('Cla')){
  24. class Cla implements iDemo
  25. {
  26. use tDemo;
  27. }
  28. }
  29. //访问
  30. echo Cla::index();
  31. //输出 Cla类嗲用了tDemo::index方法

3. 一个简单的抽奖

  1. <?php
  2. //设置奖品
  3. $prizes = ['电脑', '手机', '平板', '耳机', '拖鞋', '口罩'];
  4. //创建接口生成唯一ID抽象类
  5. interface onlyId
  6. {
  7. //生成唯一id
  8. public static function getOnlyId(int $min, int $max):int;
  9. }
  10. //创建trait实现抽象类
  11. trait AbalonesId
  12. {
  13. // 实现唯一id 传两个参数 最大值 最小值
  14. public static function getOnlyId(int $min, int $max): int
  15. {
  16. return mt_rand($min, $max);
  17. }
  18. // 返回奖品
  19. public static function prize($prizes, $id)
  20. {
  21. return $prizes[$id];
  22. }
  23. }
  24. //创建工作类
  25. class DrawPrize implements onlyId
  26. {
  27. use AbalonesId;
  28. }
  29. $id = DrawPrize::getOnlyId(0, 5);
  30. echo DrawPrize::prize($prizes,$id);
  31. //随机输出数组prizes中的值

总结

关于trait命名冲突解决办法必须先替代 insteadof 然后再选择是否给另一个同名方法赋值别名

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

批改状态:合格

老师批语:最好避免冲突的方式, 是使用我们后面学习的命名空间
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系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+教程免费学