PHPインターフェイスクラスと抽象クラスの実際の役割
1.php インターフェイス クラス: インターフェイス
実際、その機能は非常に単純です。多くの人が一緒にプロジェクトを開発する場合、他の人が作成したクラスを呼び出すことがあります。その場合、その特定の機能をどうやって知ることができるのでしょうか。実装メソッドの名前はどのように決まるのでしょうか? このとき、インターフェイス クラスを定義するときに、そのクラス内のメソッドを次のようなサブクラスで実装する必要があります。
次のようにコードをコピーします。インターフェース Shop
{
public function buy($gid);
public function view($gid);
}
3 つのメソッドを定義します: Buy、sell、および view の場合、このクラスを継承するすべてのサブクラスは、これら 3 つのメソッドのいずれかを実装する必要があります。サブクラスがこれらを実装していない場合、機能しません。実際、インターフェイス クラスは、端的に言えば、クラスのテンプレートであり、クラスの規則です。このカテゴリに属する場合は、どのような方法であっても、私の規則に従わなければなりません。それはあなた次第です。次のようなものです:
次のようにコードをコピーします:
class BaseShop は Shop{
public function buy($gid)
{
echo('次の ID で製品を購入しました: '.$gid.');
}
public function sell($gid)
{
echo('ID: '.$gid.')
}
public function view($gid)
{
echo('You Viewed the product with the ID: '.$gid.');
}
}
考えてみてください、多くの人が共同作業する大規模なプロジェクトでは、インターフェイス クラスがあると非常に便利です。あなたの特定の関数のメソッド名が何であるかを他の人に尋ねる必要がないようにします。 もちろん、これが好きなら、私はそれをせずにはいられません。
2.php 抽象クラス: 抽象
実は、抽象クラスとインターフェースクラスは部分的に似ているのですが、抽象クラスは似ている部分を抽出しているという文章をどこかで見た記憶がありますが、実際には「抽象クラスの真実を理解する」と書かれています。抽象クラスの役割は、多くのクラスが頻繁に書き換えているメソッドを使用していることがわかった場合に、「パブリック クラスごとに書き換えることはできない」という場合に、抽象クラスの使用を検討できることです。クラスのインスタンスを作成し、このパブリック クラスをインスタンス化し、同じメソッドを呼び出します。」 これで問題ありません。実際、これは抽象クラスの動作ですが、インスタンス化の手順が省略できるため、このメソッドを呼び出すのと同じくらい便利です。クラスに直接アクセスすることもできますが、このメソッドをオーバーロードすることもできます。例:
次のようにコードをコピーします。
{
public function buy($gid)
{
echo('ID: '.$gid.' の製品を購入しました。'); public function sell($gid)
{
echo('ID: '.$gid.' の商品を販売しました。');
}
public function view($gid)
{
echo('次の ID で商品を閲覧しましたID: '.$gid.'); :'.$gid. の製品');
}
}
クラス BallShop は BaseShop を拡張します
var $itme_id = null; $this->itme_id = 2314;
}
public function open()
{
$this->sell($this->itme_id);
}
}
上記と同様に、 Store クラスを定義し、そのすべてのアイテム (part、buy、sell、view など) を抽出しました。これらのメソッドは抽象クラスに実装されており、それを継承するサブクラスがこれらのメソッドを自動的に取得し、サブクラスが独自の処理を実行します。 、コードの重複を導入し、再利用性を向上させます。
結論: 抽象クラスはクラスのサービスプロバイダーです。サービスを提供しないことに不満がある場合は、それらを使用する必要はありません。
はは、上記は PHP インターフェイス クラスと抽象クラスについての私の謙虚な意見です。これら 2 つについて混乱している友人に役立つことを願っています。その他の関連記事については、メッセージを残してください。 PHP 中国語 Web サイト (www.php.cn) に注意してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Golang には抽象クラスがありません。 Golang はオブジェクト指向 (OOP) 言語ではありません。クラス、継承、抽象クラスの概念はありません。ただし、golang には構造体 (struct) とインターフェース (インターフェース) があり、これらを組み合わせることによって間接的に実装できます。構造体とインターフェイス オブジェクト言語の抽象クラス。

Java では、インターフェイスおよび抽象クラス内で内部クラスを定義できるため、コードの再利用とモジュール化に柔軟性が提供されます。インターフェイスの内部クラスは特定の関数を実装できますが、抽象クラスの内部クラスは一般的な関数を定義でき、サブクラスは具体的な実装を提供します。

インターフェイス インターフェイスは、Java の抽象メソッドと定数を定義します。インターフェイス内のメソッドは実装されていませんが、インターフェイスを実装するクラスによって提供されます。このインターフェイスは、実装クラスが指定されたメソッド実装を提供することを要求するコントラクトを定義します。インターフェイスを宣言します。 publicinterfaceExampleInterface{voiddoSomething();intgetSomething();} 抽象クラス 抽象クラスは、インスタンス化できないクラスです。これには、抽象メソッドと非抽象メソッドが混在しています。インターフェイスと同様に、抽象クラスの抽象メソッドはサブクラスによって実装されます。ただし、抽象クラスには、デフォルトの実装を提供する具象メソッドを含めることもできます。抽象クラスを宣言: publicabstractcl

インターフェイス: 実装のないコントラクト インターフェイスは、Java でメソッド シグネチャのセットを定義しますが、具体的な実装は提供しません。これは、インターフェイスを実装するクラスに、その指定されたメソッドを強制的に実装するコントラクトとして機能します。インターフェイス内のメソッドは抽象メソッドであり、メソッド本体はありません。コード例: publicinterfaceAnimal{voideat();voidsleep();} 抽象クラス: 部分的に実装されたブループリント 抽象クラスは、そのサブクラスによって継承できる部分的な実装を提供する親クラスです。インターフェイスとは異なり、抽象クラスには具体的な実装と抽象メソッドを含めることができます。抽象メソッドは、abstract キーワードを使用して宣言され、サブクラスによってオーバーライドされる必要があります。コード例: publicabstractcla

インターフェイスと抽象クラスは、分離と拡張性のためにデザイン パターンで使用されます。インターフェイスはメソッド シグネチャを定義し、抽象クラスは部分的な実装を提供し、サブクラスは未実装のメソッドを実装する必要があります。ストラテジ パターンでは、インターフェイスを使用してアルゴリズムを定義し、抽象クラスまたは具象クラスが実装を提供するため、アルゴリズムを動的に切り替えることができます。オブザーバー パターンでは、インターフェイスを使用してオブザーバーの動作を定義し、抽象クラスまたは具象クラスを使用して通知をサブスクライブおよびパブリッシュします。アダプター パターンでは、インターフェイスを使用して既存のクラスを適応させることができ、互換性のあるインターフェイスを実装できるため、元のコードとの対話が可能になります。

関数型インターフェイスと抽象クラスはどちらもコードの再利用を可能にするために使用されますが、関数型インターフェイスは参照関数を使用し、抽象クラスは継承を使用するなど、さまざまな方法で実装されます。関数型インターフェイスはインスタンス化できませんが、抽象クラスはインスタンス化できます。関数型インターフェイスは宣言されたメソッドをすべて実装する必要がありますが、抽象クラスは一部のメソッドのみを実装できます。

Java のインターフェイスと抽象クラスのパフォーマンスを最適化するためのヒント: インターフェイスでのデフォルト メソッドの使用を避け、必要な場合にのみ使用します。インターフェイス定義を最小限にして、必要なコンテンツのみを含めます。できるだけ多くの抽象クラス メソッドを実装します。サブクラスによるオーバーライドを防ぐには、final 修飾子を使用します。呼び出すべきではないメソッドをプライベートとして宣言します。

相違点: 1. 抽象クラスは属性と通常のメソッドを持つことができますが、インターフェイスには持てません; 2. 抽象クラスには抽象メソッドは存在しない可能性がありますが、インターフェイスには「抽象」メソッドが必要です; 3. 構文に違いがあります; 4.抽象クラス クラスの前にabstractキーワードを使用して宣言すると、クラスとして宣言されます インターフェースはinterfaceで宣言されますが、classでは宣言できません 5. 抽象クラスの抽象メソッドはabstractで宣言する必要があります。ただし、インターフェイスは必須ではありません; 6. 抽象クラスとインターフェイスは、さまざまな方法で詳細なメソッドを実装します。
