ホームページ  >  記事  >  バックエンド開発  >  [転送] PHP はインターフェイスを介して多重継承を実装します

[転送] PHP はインターフェイスを介して多重継承を実装します

WBOY
WBOYオリジナル
2016-06-13 13:03:541072ブラウズ

[転送] PHP はインターフェイスを介して多重継承を実装します

PHP クラスは単一継承ですが、クラスの特性がインターフェイスに抽象化され、インターフェイスを実装することでオブジェクトが複数の ID を持つ限り、インターフェイスの使用など、他の特別なメソッドを通じて多重継承を実現できます。これにより、多重継承をシミュレートできます。


以下は、インターフェイスを使用して多重継承をシミュレートする例です。ソース コードは次のとおりです。

    interface?UserInterface{?// ユーザー インターフェイスを定義します ?
  1. ?関数?getname();
  2. } ?
  3. interface?TeacherInterface{?//教師関連のインターフェイス ?
  4. ?関数?getLengthOfService()?
  5. } ?
  6. class?User?implements?UserInterface?{?// UserInterface インターフェイスを実装します ?
  7. ?private?$name?=?"トム" ?
  8. ?public?function?getName(){ ?
  9. ??return?$this->name ?
  10. ?} ?
  11. } ?
  12. class?Teacher?implements?TeacherInterface?{?// TeacherInterface インターフェイスを実装します ?
  13. ?private?$lengthOfService?=?5;?//?優先度?
  14. ?public?function?getLengthOfService(){ ?
  15. ??return?$this->lengthOf?
  16. ?} ?
  17. } ?
  18. //?User クラスから継承し、TeacherInterface インターフェイスを実装します。
  19. class?GraduateStudent?extends?User?implements?TeacherInterface?{ ?
  20. ?プライベート?$教師??
  21. ?public?function?__construct(){ ?
  22. ??$this->Teacher?=?new?Teacher();?
  23. ?}?
  24. ?public?function?getLengthOfService(){ ?
  25. ??return?$this->Teacher->getLengthOfService() ?
  26. ?} ?
  27. } ?
  28. クラス?アクト{ ?
  29. ?//ここでの型ヒントはインターフェイスの型に変更されていることに注意してください?
  30. ?public?static?function?getUserName(UserInterface?$_user){ ?
  31. ??echo?"名前は?"?.?$_user->getName()?."
    ";
  32. ?} ?
  33. ?//ここの型ヒントは TeacherInterface 型に変更されます。
  34. ?public?static?function??getLengthOfService(TeacherInterface?$_Teacher){ ?
  35. ??echo?"年齢は?"?.$_Teacher->getLengthOfService()?."
    ";
  36. ?} ?
  37. } ?
  38. $graduateStudent?=?new?GraduateStudent() ?
  39. Act::getUserName($graduateStudent) ?
  40. Act::getLengthOfService($graduateStudent) ?
  41. //結果はまさに私たちが望んでいたものであり、複数のアイデンティティを持つオブジェクトが実現されます。
  42. ?>?
  43. サンプルの実行結果は次のとおりです:
  44. 名前はトムです
年齢は5歳です


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。