博主信息
博文 47
粉丝 1
评论 0
访问量 66281
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP - 面向接口编程
晴天
原创
1028人浏览过

1. 接口使用场景:接口的多继承

  1. <?php
  2. // 接口的使用场景2 :多接口继承
  3. // 接口可以突破php类的继承限制,允许多继承,实现多层级的接口
  4. // 创建第一个接口
  5. interface api_1
  6. {
  7. const NAME = 'michael';
  8. }
  9. // 第二个继承第一个
  10. interface api_2 extends api_1{
  11. const AGE = 25;
  12. }
  13. // 第三个继承前两个
  14. interface api_3 extends api_1 ,api_2{
  15. // 接口抽象方法
  16. public function user();
  17. }
  18. // 实现接口类
  19. // 因为上面的接口api_3已经继承了前两个,所以这里只写api_3即可,当然也支持加上 ’api_1,api_2‘
  20. class Name implements api_3
  21. {
  22. // 先实现抽象方法
  23. public function user(){
  24. return '姓名:'.api_3::NAME;
  25. }
  26. }
  27. echo (new Name)->user();

2. trait

  1. //trait 功能与语法 PHP5.4+ 实现代码的复用
  2. //trait 与抽象类,接口 一样不能被实例化,只能嵌入到宿主类中使用
  3. //trait 是一个特殊类:只能使用 常规 静态 抽象 不能用类常量
  4. trait tDemo
  5. {
  6. // 常规属性
  7. protected $name = 'michael';
  8. //常规方法
  9. public function getName()
  10. {
  11. return $this->name;
  12. }
  13. // 静态属性
  14. public static $sex = '男';
  15. //静态方法
  16. public function getSex()
  17. {
  18. return self::$sex;
  19. }
  20. // 抽象属性
  21. public static $age;
  22. // 抽象方法
  23. abstract public static function setAge();
  24. }
  25. //创建工作类引用
  26. class Demo
  27. {
  28. use tDemo;
  29. public static function setAge()
  30. {
  31. return self::$age;
  32. }
  33. }
  34. //访问
  35. Demo::$age = 30;
  36. echo Demo::setAge();
  37. echo '<hr>';
  38. $demo = new Demo();
  39. echo '姓名'.$demo->getName().'年龄:'.Demo::setAge().'性别'.Demo::getSex();
  1. <?php
  2. //trait 功能1 代码复用
  3. //创建一个公共方法库
  4. trait Means{
  5. // 乘法
  6. public function Way_1($a,$b){
  7. return $a*$b;
  8. }
  9. // 除法
  10. public function Way_2($a,$b){
  11. return $a/$b;
  12. }
  13. // 加法
  14. public function Way_3($a,$b){
  15. return $a+$b;
  16. }
  17. // 减法
  18. public function Way_4($a,$b){
  19. return $a-$b;
  20. }
  21. }
  22. //实现类
  23. class White
  24. {
  25. use Means;
  26. }
  27. //创建类示例
  28. $white = new White;
  29. //乘法
  30. echo $white->Way_1(2,8).'<hr>';
  31. //除法
  32. echo $white->Way_2(8,2).'<hr>';
  33. //加法
  34. echo $white->Way_3(2,8).'<hr>';
  35. //减法
  36. echo $white->Way_4(8,2).'<hr>';
  37. //输出 16 4 10 6

总结

trait 在继承上下文环境中,具有优先级,通过优先设置,降低单继承的影响
优先级比较 当前类 > trait > 当前类的父类
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+教程免费学