博客列表 >PHP:面向接口编程之接口与trait的实例场景1

PHP:面向接口编程之接口与trait的实例场景1

楷
原创
2020年05月03日 20:33:19575浏览

一、接口的实例场景

1.单接口

  1. <?php
  2. // 接口编程之场景1:单接口
  3. // 创建接口
  4. interface iSingleinter1
  5. {
  6. const book = '射雕英雄传';
  7. public static function write1();
  8. }
  9. // 工作类实现接口
  10. class iJob implements iSingleinter1
  11. {
  12. protected static $name = '郭靖';
  13. public static function write1()
  14. {
  15. return iSingleinter1::book . '的男主角是: ' . self::$name ;
  16. }
  17. }
  18. // 客户端
  19. echo iSingleinter1::book , '<br>';
  20. echo iJob:: write1();

实例效果

2.多接口继承的实例场景

  1. <?php
  2. // 多接口继承
  3. interface iUser1
  4. {
  5. const novel1 = '笑傲江湖';
  6. }
  7. // 接口2继承接口1
  8. interface iUser2
  9. {
  10. const novel2 = '射雕英雄传';
  11. }
  12. // 接口3继承以上两个接口,即继承接口1和接口2
  13. interface iUser3 extends iUser2
  14. {
  15. const novel3 = '小李飞刀';
  16. // 抽象方法
  17. public static function write1();
  18. }
  19. // 工作类
  20. // 为了代码简写,只需写实现接口3就等于接口1、2、3
  21. class Job implements iUser3
  22. {
  23. protected static $name = '张三、李四、王五、马六';
  24. // 实现抽象方法
  25. public static function write1()
  26. {
  27. return self::$name . '最喜欢的武侠小说是:' . iuser1::novel1 . '、' . iuser2::novel2 . '、' . iuser3::novel3;
  28. }
  29. }
  30. // 客户端
  31. echo Job::write1();

实例效果

3.抽象类部分实现接口的场景

  1. <?php
  2. // 接口场景3: 用抽象类来部分实现一个接口
  3. interface iUser1
  4. {
  5. const login = '藏经阁';
  6. const kungfu = '降龙十八掌';
  7. // 接口方法1-4----招式内容
  8. public static function moves1();
  9. public static function moves2();
  10. public static function moves3();
  11. public static function moves4();
  12. // 接口方法5----入门
  13. public static function signin();
  14. }
  15. // 用抽象类实现接口5
  16. abstract class Sign implements iUser1
  17. {
  18. public static function signin()
  19. {
  20. return '藏经阁入口登陆成功~~~请看“降龙十八掌”武功秘籍';
  21. }
  22. }
  23. // 工作类
  24. class Move extends Sign
  25. {
  26. public static function moves1()
  27. {
  28. return '第一招:亢龙有悔!';
  29. }
  30. public static function moves2()
  31. {
  32. }
  33. public static function moves3()
  34. {}
  35. public static function moves4()
  36. {}
  37. }
  38. // 客户端
  39. echo Sign::signin(),'<br>';
  40. echo Move::moves1();

实例效果

二、Trait

1.功能和语法

  1. <?php
  2. // trait 功能与语法
  3. // trait: 代码复用
  4. // trait:与抽象类,接口一样不能实例化, 只能嵌入到宿主类中使用
  5. // triat是一个特殊类: 1. 常规, 2. 静态, 3. 抽象, 不能用类常量
  6. trait tDemo1
  7. {
  8. // 常规
  9. protected $name = '令狐冲';
  10. public function getName()
  11. {
  12. return '我喜欢的一个武侠人物:'. $this->name ;
  13. }
  14. // 静态
  15. protected static $sex = '男';
  16. public static function getSex()
  17. {
  18. return ' 性别 :' . self::$sex;
  19. }
  20. // 抽象
  21. public static $age;
  22. abstract public static function getAge();
  23. }
  24. // 客户端
  25. class Demo
  26. {
  27. // 类中使用trait , 用use 关键
  28. use tDemo1;
  29. // 抽象类方法
  30. public static function getAge()
  31. {
  32. return ' 年龄 :' . self::$age;
  33. }
  34. }
  35. // 创建对象
  36. $demo = new Demo;
  37. // 初始化age
  38. demo::$age = 30;
  39. echo $demo->getName() . demo::getSex() . $demo::getAge();

实例效果

4.trait的功能1:代码复用——创建公共方法集

  1. <?php
  2. // 创建格式打印的公共方法集
  3. trait tPrint
  4. {
  5. public function printer()
  6. {
  7. // 获取所有属性的函数:get_class_var,__CLASS__
  8. $property = get_class_vars(__CLASS__);
  9. // 格式化打印属性
  10. printf('<pre>%s</pre>',print_r($property,true));
  11. }
  12. }
  13. // 调用这个公共方法集trait
  14. class user1
  15. {
  16. use tPrint;
  17. protected $name = '令狐冲';
  18. protected $sex = '男';
  19. protected $kungFu = '独孤九剑';
  20. }
  21. echo (new user1)->printer();
  22. class user2
  23. {
  24. // 引用trait
  25. use tPrint;
  26. protected $name = '任我行';
  27. protected $sex = '男';
  28. protected $kungFu = '吸星大法';
  29. }
  30. (new user2)->printer();
  31. class user3
  32. {
  33. protected $name = '东方不败';
  34. protected $sex = '女';
  35. protected $kungFu = '葵花宝典';
  36. use tPrint;
  37. }
  38. (new user3)->printer();

实例效果

总结:
1、接口的场景:单接口、多接口继承、用抽象类实现部分接口等。看老师的实例,重复不断地写了三四次代码,才有点感觉,虽然不是很明白,总算有点进步。学编程,有了老师指导,我最缺的是练习,重复、重复、重复!真的没别的技巧。
2.trait是一种特殊类。关键字:use
功能1:代码复用。可创建公共方法集
在继承上下文环境中,具有优先级:
子类方法>trait方法>父类方法。
这个特点在某些环境中有用处,比如需要跨越父类方法而不能删除父类方法的场景。

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