Blogger Information
Blog 39
fans 0
comment 0
visits 30547
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP:面向接口编程之接口与trait的实例场景1
Original
576 people have browsed it

一、接口的实例场景

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方法>父类方法。
这个特点在某些环境中有用处,比如需要跨越父类方法而不能删除父类方法的场景。

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:你说得对, 写得多了 , 就有感觉了, 日久生情
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post