PHP アブストラクトとインターフェイスの違い

WBOY
リリース: 2016-07-25 08:46:43
オリジナル
1068 人が閲覧しました
1.php インターフェースクラス:interface
実際、それらの役割は非常に単純です。多くの人々が一緒にプロジェクトを開発するとき、彼らは皆、他の人が書いたいくつかのクラスを呼び出すことができます。特定の関数の実装メソッドにどのような名前が付けられているかはご存知でしょう。このとき、PHP インターフェイス クラスが登場します。インターフェイス クラスを定義するとき、そのメソッドは次のようなサブクラスによって実装される必要があります。 1 インターフェース ショップ 2{
3 パブリック関数 buy($gid);
4 パブリック関数 sell($gid);
5 パブリック関数ビュー($gid);
6}

ショップ インターフェイス クラスを宣言し、buy、sell、view の 3 つのメソッドを定義します。次に、このクラスを継承するすべてのサブクラスがこれら 3 つのメソッドを実装する必要があり、サブクラスが機能しない場合は機能しません。これらを実装しても機能しません。実際、インターフェイス クラスは、端的に言えば、クラスのテンプレートであり、クラスの規則です。このカテゴリに属する​​場合は、どのような方法であっても、私の規則に従わなければなりません。それをどうするかはあなた次第です:
BaseShop クラスは Shop を実装します {
パブリック関数購入($gid)
{
echo('ID:'.$gid で製品を購入しました。');
}
パブリック関数 sell($gid)
{
echo('ID:'.$gid の商品を販売しました。');
}
パブリック関数ビュー($gid)
{
echo('ID:'.$gid の商品を閲覧しました。');
}
}

考えてみてください。多くの人が共同作業する大規模なプロジェクトでは、インターフェイス クラスがあると非常に便利です。そうすれば、特定の関数のメソッド名が何であるかを他の人に尋ねる必要がなくなります。 、これが気に入ったらお手伝いできません。
結論: インターフェイス クラスはクラスのリーダーであり、方向を示し、サブクラスはその指定されたメソッドを完了する必要があります。
2.php 抽象クラス: abstract
実は、抽象クラスとインターフェースクラスは似ている部分があるのですが、この文は似ている部分を抜粋しています。実際、抽象クラスの機能は、クラスの多くが繰り返し記述している多くのメソッドを使用していることがわかった場合、抽象クラスの使用を検討できるということです。 「クラスを書き直すことは可能ですか? パブリック クラスごとに、このパブリック クラスをインスタンス化し、同じメソッドを呼び出します。」 それはここで可能です。実際、これは抽象クラスが行うことですが、省略されています。インスタンス化により、このクラスのメソッドを直接呼び出すのと同じくらい便利になり、このメソッドをオーバーロードすることもできます。例:
1 つの抽象クラス BaseShop
2{ 3 パブリック関数 buy($gid)
4{
5 echo('ID:'.$gid で製品を購入しました。');
6 }
7 パブリック関数 sell($gid)
8
9 echo('ID:'.$gid の製品を販売しました。');
10 }
11 パブリック関数ビュー($gid)
12{
13 echo('ID:'.$gid の商品を閲覧しました。');
14 }
15}
16 クラス BallShop が BaseShop を拡張します
17
18 var $itme_id = null;
19 パブリック関数 __construct()
20{
21 $this->itme_id = 2314;
22 }
23 パブリック関数 open()
24
25 $this->sell($this->itme_id);
26 }
27}
28


上記と同様に、ストアクラスを定義し、そのすべての部分、購入、販売、表示を抽出し、これらのメソッドを抽象クラスに実装し、それを継承するサブクラスを作成します。これらのメソッドを自動的に取得すると、サブクラスは独自の処理を実行し、コードの重複を導入して再利用性を向上させます。
結論: 抽象クラスはクラスのサービスプロバイダーです。サービスを提供せずに満足できない場合は、それらを使用する必要はありません。 。抽象関数メソッドは、親クラスで宣言されたメソッドであり、サブクラスで実装する必要がありますが、抽象関数で宣言されていないメソッドはサブクラスのパブリック メソッドになります。サブクラス内






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