博客列表 >PHP基础:interface接口与trait组件基础

PHP基础:interface接口与trait组件基础

暴宇
暴宇原创
2020年06月01日 19:54:07935浏览

PHP基础:interface接口与trait组件基础

1.interface接口基础

interface接口相当于设计/抽象类,可将顶层设计代码放入interface接口中,再通过工作类的继承将其实现,接口不能被实例化,只能被继承。

  1. interface iface{
  2. // 接口常量:用关键字const声明
  3. const MY='接口常量值';
  4. // 接口方法
  5. public function ifun();
  6. }
  7. // 实现(工作类),用关键字implements继承接口
  8. class job implements iface{
  9. public $myname='工作类属性值';
  10. public function ifun(){
  11. return '工作类中实现的接口方法:'.__FUNCTION__;
  12. }
  13. }
  14. // 实例化工作类
  15. $job=new job;
  16. // 访问接口常量
  17. echo '访问接口常量:',iface::MY,'<hr>';
  18. // 访问工作类中的属性
  19. echo '访问工作类中的属性:',$job->myname,'<hr>';
  20. // 访问在工作类中实现的接口方法
  21. echo '访问在工作类中实现的接口方法:',$job->ifun(),'<hr>';

2.trait组件基础

trait是一种很特殊的类,不能被实例化,也不能继承,只能嵌入其他类中,使用use关键字引入/嵌入其他类中,相当于是一个代码组件,哪里需要它就use它。

  1. trait tClass
  2. {
  3. // 常规属性及方法
  4. public $tname = '常规属性';
  5. public function tfun()
  6. {
  7. return 'trait中的常规方法:'.__FUNCTION__;
  8. }
  9. // 静态属性及方法
  10. public static $stname = '静态属性';
  11. public static function stfun()
  12. {
  13. return 'trait中的静态方法:'.__FUNCTION__;
  14. }
  15. // 抽象
  16. // 抽象静态属性
  17. public static $cstname;
  18. // 抽象静态方法
  19. abstract public static function cstfun();
  20. }
  21. // trait相当于组件,可以直接引用或嵌入到其他的类中
  22. class Classname1
  23. {
  24. // 类中使用trait , 用use 关键
  25. use tClass;
  26. // 抽象静态方法实现
  27. public static function cstfun(){
  28. return '实现trait中的抽象静态方法:'.__FUNCTION__;
  29. }
  30. // 在类内无法直接给trait中的抽象静态属性赋值?
  31. }
  32. class Classname2
  33. {
  34. // 类中使用trait , 用use 关键
  35. use tClass;
  36. // 抽象静态方法实现
  37. public static function cstfun(){
  38. return '实现trait中的抽象静态方法:'.__FUNCTION__;
  39. }
  40. // 在类内无法直接给trait中的抽象静态属性赋值?
  41. }
  42. // 实例化
  43. $Class1=new Classname1;
  44. // 给抽象静态属性赋值
  45. Classname1::$cstname='在类外给trait抽象静态属性赋的值1';
  46. echo $Class1->tname,'<hr>';
  47. echo $Class1->tfun(),'<hr>';
  48. echo $Class1::$stname,'<hr>';
  49. echo $Class1::stfun(),'<hr>';
  50. echo $Class1::$cstname,'<hr>';
  51. echo $Class1::cstfun(),'<hr>';
  52. // 实例化
  53. $Class2=new Classname2;
  54. // 给抽象静态属性赋值
  55. Classname2::$cstname='在类外给trait抽象静态属性赋的值2';
  56. echo $Class2->tname,'<hr>';
  57. echo $Class2->tfun(),'<hr>';
  58. echo $Class2::$stname,'<hr>';
  59. echo $Class2::stfun(),'<hr>';
  60. echo $Class2::$cstname,'<hr>';
  61. echo $Class2::cstfun(),'<hr>';

总结

1.interface接口不能被实例化,只能被继承。

2.trait不能被实例化,也不能继承,只能用use关键字引入/嵌入其他类中。

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