【转】PHP透过接口实现多重继承

WBOY
Freigeben: 2016-06-13 11:03:31
Original
770 Leute haben es durchsucht

【转】PHP通过接口实现多重继承

PHP类虽然是单继承的,但是可以通过其它特殊的方式实现多重继承,比如使用接口实现,只要把类的特征抽象为接口,并通过实现接口的方式让对象有多重身 份,通过这样就可以模拟多重继承了。


下面就是一个用接口模拟多重继承的例子,源代码如下:

  1. ?
  2. interface?UserInterface{?// 定义User的接口 ?
  3. ?function?getname(); ?
  4. } ?
  5. interface?TeacherInterface{?//teacher 相关接口 ?
  6. ?function?getLengthOfService(); ?
  7. } ?
  8. class?User?implements?UserInterface?{?// 实现UserInterface接口 ?
  9. ?private?$name?=?"tom"; ?
  10. ?public?function?getName(){ ?
  11. ??return?$this->name; ?
  12. ?} ?
  13. } ?
  14. class?Teacher?implements?TeacherInterface?{?// 实现TeacherInterface接口 ?
  15. ?private?$lengthOfService?=?5;?//?工 龄? ?
  16. ?public?function?getLengthOfService(){ ?
  17. ??return?$this->lengthOfService; ?
  18. ?} ?
  19. } ?
  20. //?继承自User类,同时实现了 TeacherInterface接口. ?
  21. class?GraduateStudent?extends?User?implements?TeacherInterface?{ ?
  22. ?private?$teacher?; ?
  23. ?public?function?__construct(){ ?
  24. ??$this->teacher?=?new?Teacher();?? ?
  25. ?}? ?
  26. ?public?function?getLengthOfService(){ ?
  27. ??return?$this->teacher->getLengthOfService(); ?
  28. ?} ?
  29. } ?
  30. class?Act{ ?
  31. ?//注意这里的类型提示改成了接口类型 ?
  32. ?public?static?function?getUserName(UserInterface?$_user){ ?
  33. ??echo?"Name?is?"?.?$_user->getName()?."
    "; ?
  34. ?} ?
  35. ?//这里的类型提示改成了 TeacherInterface类型. ?
  36. ?public?static?function??getLengthOfService(TeacherInterface?$_teacher){ ?
  37. ??echo?"Age?is?"?.$_teacher->getLengthOfService()?."
    "; ?
  38. ?} ?
  39. } ?
  40. $graduateStudent?=?new?GraduateStudent(); ?
  41. Act::getUserName($graduateStudent); ?
  42. Act::getLengthOfService($graduateStudent); ?
  43. //结果正如我们所要的,实现了有多重身份的一个对象. ?
  44. ?>?


示例运行结果如下:

Name is tom

Age is 5

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage