PHP の抽象クラスとインターフェイスの違いと選択肢

WBOY
リリース: 2016-06-13 12:43:40
オリジナル
753 人が閲覧しました

PHP の抽象クラスとインターフェイスの違いと選択肢

違い:

1. インターフェースはキーワードimplementsを通じて使用されます。抽象クラスを使用するには、キーワード extends を使用します。もちろん、キーワード extends を使用してインターフェイスを継承することもできます。

2. インターフェース内ではメンバ変数(クラス静的変数を含む)は宣言できませんが、クラス定数は宣言できます。さまざまなタイプのメンバー変数を抽象クラスで宣言して、データのカプセル化を実装できます。 (さらに、JAVA インターフェースのメンバー変数は public static Final 型として宣言する必要があります)

?

[php]?プレーンコピーを表示
  1. 要約?クラス?父?{??
  2. ????関数?meth1()?{??
  3. ??????????エコー?"meth1...
    "
    ;??
  4. ????}??
  5. ????抽象?関数?meth2();??
  6. ????public?$var1="var1";??
  7. ????パブリック?静的?$var2= "var2";??
  8. ????const?Var3="Var3";??
  9. }??
  10. クラス?息子?延長?父?{??
  11. ????関数?meth2()?{??
  12. ??????????エコー?「meth2?of?Son...
    ;??
  13. ????}??
  14. }??
  15. $s=新しい?Son();??
  16. echo?$s->var1."
    "
    ;??
  17. echo?父::$var2."
    "
    ;??
  18. echo?Father::Var3."
    "
    ;??
  19. ??
  20. ??
  21. インターフェース?IF父?{??
  22. ????//public?$iVar1="iVar1";??????メンバー変数をここのインターフェイス定義に含めることはできません??
  23. ????//public?static?$iVar2="iVar2";?静的変数をここのインターフェイス定義に含めることはできません??
  24. ????const?iVar3="iVar3";??
  25. ????関数?iMeth1();??
  26. }??
  27. クラス?ISon?実装?IFather?{??
  28. ????関数?iMeth1()?{??
  29. ??????エコー?"iMeth1...
    "
    ;?? >
  30. ????}??
  31. }??
  32. $ は=新しい?Ison();??
  33. echo?IFather::iVar3;??
  34. ?>??


3. インターフェイスにはコンストラクターがありませんが、抽象クラスにはコンストラクターがあります。

?

4. インターフェイスのメソッドはデフォルトでパブリック型ですが、抽象クラスのメソッドはプライベート、プロテクト、またはパブリックに変更できます。

5. クラスは同時に複数のインターフェースを実装できますが、クラスは 1 つの抽象クラスのみを継承できます。

?

抽象クラスまたはインターフェイス。

  • 密接に関連するオブジェクトによって使用されるモデルを作成したい場合は、抽象クラスを使用できます。無関係な多数のオブジェクトに採用される機能を作成する場合は、インターフェイスを使用します。
  • 動作を複数のソースから継承する必要がある場合は、インターフェイスを使用します。
  • すべてのクラスが共通の動作実装を共有することがわかっている場合は、抽象クラスを使用し、その中でその動作を実装します。


出典: http://blog.csdn.net/fanteathy/article/details/7309966

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート