Blogger Information
Blog 36
fans 0
comment 0
visits 27866
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
interface类和trait类的基本功能
小程_武汉_214945
Original
832 people have browsed it

接口

  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方法>父类方法

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:trait就是传统函数库的替代品, 记住这个就好办了
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