ホームページ  >  記事  >  バックエンド開発  >  PHPの抽象クラスとインターフェースの違い

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

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

1. PHP インターフェイス クラス: インターフェイス

実際、その機能は非常に単純です。多くの人が一緒にプロジェクトを開発する場合、全員が他の人が作成したクラスを呼び出すことがあります。特定の関数の実装メソッドはどのように命名されますか? このとき、インターフェイス クラスを定義するときに、次のようなメソッドが登場します。コードは次のとおりです。

interface Shop <br />{ <br />public function buy($gid); <br />public function sell($gid); <br />public function view($gid); <br />} 

ショップ インターフェイス クラスを宣言し、buy、sell、view の 3 つのメソッドを定義し、このクラスをすべて継承します。サブクラスはこれら 3 つのメソッドのいずれかを実装する必要があります。サブクラスがこれらのメソッドを実装していない場合、サブクラスは機能しません。実際、インターフェイス クラスは、端的に言えば、クラスのテンプレートであり、クラスの規則です。このカテゴリに属する​​場合は、どのような方法であっても、私の規則に従わなければなりません。
コードは次のとおりです:

class BaseShop implements Shop <br />{ <br />public function buy($gid) <br />{ <br />echo('你购买了ID为 :'.$gid.'的商品'); <br />} <br />public function sell($gid) <br />{ <br />echo('你卖了ID为 :'.$gid.'的商品'); <br />} <br />public function view($gid) <br />{ <br />echo('你查看了ID为 :'.$gid.'的商品'); <br />} <br />} 

考えてみてください。多くの人が共同作業する大規模なプロジェクトでは、これが当てはまります。インターフェイス クラスがあると便利です。そうすることで、特定の関数のメソッド名を他の人に尋ねる必要がなくなります。 もちろん、これが気に入っているのであれば、それは仕方ありません。
結論: インターフェイス クラスはクラスのリーダーであり、方向を示し、サブクラスは指定されたメソッドを完了する必要があります。

2. PHP 抽象クラス: abstract

実際、抽象クラスとインターフェイス クラスは部分的に似ています。このような文をどこで見たかを思い出してください。この文は、似ているようです。実際、抽象クラスの機能は、多くのクラスが繰り返し記述し続けるメソッドを使用していることがわかった場合、抽象クラスの使用を検討できるということです。クラスを書き換えて、各パブリック クラスをインスタンス化し、同じメソッドを呼び出すことは可能です。実際、これは抽象クラスが行うことですが、省略されます。インスタンス化のこのステップが排除され、メソッドを呼び出すのと同じくらい便利になります。このクラスのメソッドを直接オーバーロードすることもできます。また、このメソッドをオーバーロードすることもできます。例:

コードは次のとおりです。

abstract class BaseShop <br />{ <br />public function buy($gid) <br />{ <br />echo('你购买了ID为 :'.$gid.'的商品'); <br />} <br />public function sell($gid) <br />{ <br />echo('你卖了ID为 :'.$gid.'的商品'); <br />} <br />public function view($gid) <br />{ <br />echo('你查看了ID为 :'.$gid.'的商品'); <br />} <br />} <br />class BallShop extends BaseShop <br />{ <br />var $itme_id = null; <br />public function __construct() <br />{ <br />$this->itme_id = 2314; <br />} <br />public function open() <br />{ <br />$this->sell($this->itme_id); <br />} <br />} 

これは例です。上記と同様に、store クラスを定義し、buy (購入) などのすべての部分を抽出しました。 sell (sell)、view、およびこれらのメソッドが抽象クラスに実装されていると、それを継承するサブクラスがこれらのメソッドを自動的に取得し、サブクラスが独自の処理を実行し、コードの重複を導入し、再利用性を向上させます。

結論:

抽象クラスはクラスのサービスプロバイダーです。必要に応じて使用する必要はありません。サービスを提供する必要はありませんが、自分で行うこともできます。


相違点:

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

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

3. インターフェースにはコンストラクターはありませんが、抽象クラスにはコンストラクターを含めることができます。


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

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

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

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

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