PHP上級プログラミング学習ノート2014.06.09
この記事では、抽象クラス、インターフェイス、および契約的プログラミングと呼ばれる手法を紹介します。これらの OPP メカニズムを使用すると、作成するコードはコンテンツの計算や出力に限定されません。これらのメカニズムは、クラス間の対話のルールを概念的レベルで定義でき、アプリケーションの拡張とカスタマイズの基礎も提供します。
1. 抽象クラス
抽象クラスのメカニズムでは、特定の詳細は継承者に任せて、共通の基本クラスを常に定義する必要があります。概念を抽象化することで、開発プロジェクトで拡張性の高いアーキテクチャを作成できます。 どのクラスでも、その中の少なくとも 1 つのメソッドが抽象として宣言されている場合、このクラスも抽象として宣言する必要があります。抽象として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、その特定の関数の実装を定義することはできません。クラス宣言で abstract 修飾子を使用すると、クラスを抽象として宣言できます。
1.1 メソッドのプロトタイプ
は、メソッドの定義からメソッド本体を削除した後のシグネチャを指します。これには、アクセス レベル、関数キーワード、関数名、パラメーターが含まれます。 ({}) や括弧内のコードは含まれません。たとえば、次のコードはメソッドのプロトタイプです:
リーリー抽象クラスを継承する場合、サブクラスは親クラスのすべての抽象メソッドを定義する必要があります。さらに、これらのメソッドの アクセス制御 は親クラスのものと同じ (またはより緩和された) 必要があります。
1.2 抽象クラスについて
1.3 抽象クラスの使用
リーリー
2. オブジェクトインターフェイス
インターフェースを使用すると、クラスが実装する必要があるメソッドを指定できますが、これらのメソッドの特定の内容を定義する必要はありません。
インターフェースは、標準クラスの定義と同様に、interface キーワードを通じて定義されますが、その中で定義されているメソッドはすべて空です。
インターフェースで定義されるすべてのメソッドはパブリックである必要があります。これはインターフェースの特性です。
インターフェイスは、クラスを実装するために宣言する必要があるメソッドを宣言するために使用できるクラスに似た構造です。たとえば、インターフェイスは、API の実装方法を定義せずに API を宣言するためによく使用されます。
ほとんどの開発者は、コードおよび生成されたドキュメント内のクラスと区別するために、インターフェース名に大文字の I を接頭辞として付けることを選択します。
2.1 インターフェースを使用
extends キーワードを必要とする抽象クラスの統合とは異なり、インターフェイスの実装では、implements キーワードを使用します。クラスは複数のインターフェイスを実装できます。この場合、それらをカンマで区切る必要があります。クラスがインターフェイスを実装しているとマークされていても、そのインターフェイスのメソッドをすべて実装していない場合は、エラーがスローされます。
2.2 インターフェースを使用するケース
リーリー3.オペレーターのインスタンス
instanceof 演算子は、PHP5 の比較演算子です。左と右のパラメータを受け入れ、ブール値を返します。この演算子は、オブジェクトのインスタンスが特定の型であるか、型を継承しているか、またはクラスの特定のインターフェイスを実装しているかを判断するために使用されます。
リーリー4. 契約上のプログラミング
契約的プログラミングとは、クラスを作成する前に宣言されたインターフェイスを実装するプログラミング手法を指します。このメソッドは、クラスを確実にカプセル化するのに非常に役立ちます。コントラクト プログラミング手法を使用すると、建築家が建物を建てる前に青写真を描くのと同じように、アプリケーションを作成する前にビューの機能を定義できます。
5. 概要
抽象クラスはabstractキーワードを使用して宣言されたクラスです。クラスを抽象としてマークすると、宣言されたメソッドの実装を延期できます。メソッドを抽象として宣言するには、すべての中括弧を含むメソッド エンティティを削除し、メソッドが宣言されているコード行をセミコロンで終了します。
抽象クラスは直接インスタンス化できず、継承する必要があります。
クラスが抽象クラスから継承する場合、基本クラスで宣言されたすべての抽象メソッドを実装していない場合も、そのクラスを抽象として宣言する必要があります。
インターフェースでは、メソッド本体なしでメソッドのプロトタイプを宣言できます。これは抽象クラスに非常に似ています。それらの違いは、インターフェイスではメソッド本体を使用してメソッドを宣言できないことと、使用する構文も異なることです。クラスに検出ルールを強制するには、extends キーワードの代わりにimplements キーワードを使用する必要があります。
場合によっては、クラスが特定のクラスの型であるかどうか、または特定のインターフェイスを実装しているかどうかを判断する必要があります。このタスクには、instanceof が適しています。 instanceof は、インスタンスが特定の型であるかどうか、インスタンスが特定の型を継承しているかどうか、インスタンスまたはその祖先クラスがクラス固有のインターフェイスを実装しているかどうかという 3 つのことをチェックします。
一部の言語には複数のクラスから継承する機能があり、これは多重継承と呼ばれます。 PHP は多重継承をサポートしていません。このアイデアは、クラスに対して複数のインターフェイスを宣言する機能を提供するというものです。
インターフェイスは、クラスが従わなければならないルールを宣言するのに非常に役立ちます。契約に基づくプログラミング テクノロジは、この機能を使用してカプセル化を強化し、ワークフローを最適化します。