백엔드 개발 PHP 튜토리얼 【转】PHP透过接口实现多重继承

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

Jun 13, 2016 pm 01:03 PM
function

【转】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

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

기능은 무슨 뜻인가요? 기능은 무슨 뜻인가요? Aug 04, 2023 am 10:33 AM

기능은 무슨 뜻인가요?

Python에서 'enumerate()' 함수의 목적은 무엇입니까? Python에서 'enumerate()' 함수의 목적은 무엇입니까? Sep 01, 2023 am 11:29 AM

Python에서 'enumerate()' 함수의 목적은 무엇입니까?

MySQL.proc 테이블의 역할과 기능에 대한 자세한 설명 MySQL.proc 테이블의 역할과 기능에 대한 자세한 설명 Mar 16, 2024 am 09:03 AM

MySQL.proc 테이블의 역할과 기능에 대한 자세한 설명

Vue.use 함수의 사용법과 기능 Vue.use 함수의 사용법과 기능 Jul 24, 2023 pm 06:09 PM

Vue.use 함수의 사용법과 기능

js 함수의 사용법은 무엇입니까 js 함수의 사용법은 무엇입니까 Oct 07, 2023 am 11:25 AM

js 함수의 사용법은 무엇입니까

PHP의 file_exists() 함수 PHP의 file_exists() 함수 Sep 14, 2023 am 08:29 AM

PHP의 file_exists() 함수

PHP에서 SOA 함수를 사용하는 방법 PHP에서 SOA 함수를 사용하는 방법 May 18, 2023 pm 01:10 PM

PHP에서 SOA 함수를 사용하는 방법

Java8에서 함수 인터페이스를 사용하는 방법 Java8에서 함수 인터페이스를 사용하는 방법 Apr 17, 2023 pm 09:04 PM

Java8에서 함수 인터페이스를 사용하는 방법

See all articles