博客列表 >interface类和trait类的基本功能

interface类和trait类的基本功能

小程_武汉_214945
小程_武汉_214945原创
2020年05月15日 17:50:59833浏览

接口

  1. <?php
  2. interface iStu{
  3. const NAME= '小明';
  4. //接口类中设计两种方法
  5. public function getClass();
  6. public function getAge();
  7. }
  8. abstract class aStu implements iStu{
  9. public $class='三年级一班';
  10. //抽象类中实现部分方法
  11. public function getClass()
  12. {
  13. return iStu::NAME.'来自'.$this->class;
  14. }
  15. }
  16. interface iStu1{
  17. const NATION='中国';
  18. public function from();
  19. }
  20. //利用接口实现多继承
  21. class Stu extends aStu implements iStu1{
  22. public $age;
  23. public function __construct(int $age)
  24. {
  25. $this->age=$age;
  26. }
  27. //实现iStu另一种抽象方法
  28. public function getAge()
  29. {
  30. return iStu::NAME.'今年'.$this->age.'岁';
  31. }
  32. //实现iStu1的方法
  33. public function from(){
  34. return iStu::NAME.'出生于'.iStu1::NATION;
  35. }
  36. }
  37. $stu=new Stu(13);
  38. echo $stu->getAge(),'<br>';
  39. echo $stu->getClass(),'<br>';
  40. echo $stu->from(),'<br>';
  41. //运行结果
  42. // 小明今年13岁
  43. // 小明来自三年级一班
  44. // 小明出生于中国

trait

  1. <?php
  2. trait tStu{
  3. public function profession(){
  4. return 'trait:'.$this->name.'是程序员';
  5. }
  6. }
  7. class Stu1{
  8. public $name='李四';
  9. public function profession(){
  10. return 'parent:'.$this->name.'是公务员';
  11. }
  12. }
  13. class Stu2 extends Stu1{
  14. // 直接继承父类
  15. }
  16. class Stu3 extends Stu1{
  17. // 继承父类并引用trait
  18. use tStu;
  19. }
  20. class Stu4 extends Stu1{
  21. // 继承父类并引用trait
  22. use tStu;
  23. public function profession(){
  24. return 'self:'.$this->name.'是医生';
  25. }
  26. }
  27. $stu2=new Stu2;
  28. $stu3=new Stu3;
  29. $stu4=new Stu4;
  30. echo $stu2->profession(),'<br>';
  31. echo $stu3->profession(),'<br>';
  32. echo $stu4->profession();
  33. // 运行结果
  34. // parent:李四是公务员
  35. // trait:李四是程序员
  36. // self:李四是医生

总结:interface 和 trait 类都很好的实现了代码的复用与类的多继承,
interface 类只能包含常量和抽象方法,trait 类可以包含变量和方法
interface 和 trait 都不能直接生成对象,前者需要 implements 到类,trait 类需要 use 到类中
trait 类中的方法在调用时具有优先级:子类方法>trait方法>父类方法

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