インターフェースと抽象化について学ぶたびに混乱し、それらの違いや用途がわかりません。今日は、この本を読んで自分の考えを整理します。これが、初めて PHP を学ぶ友人に役立つことを願っています。
1.phpインターフェースクラス:interface
実際、それらの役割は非常に単純です。多くの人々が一緒にプロジェクトを開発するとき、彼らは皆、ある関数の実装メソッドの名前をどうやって知ることができるのでしょうか? PHP インターフェース クラスが機能するとき、インターフェース クラスを定義するとき、そのクラス内のメソッドは次のようなサブクラスによって実装される必要があります。
コードは次のとおりです:インターフェースショップ
{
パブリック関数 buy($gid);
パブリック関数 sell($gid);
パブリック関数 view($gid);
}
shop インターフェイス クラスを宣言し、buy、sell、view の 3 つのメソッドを定義します。次に、このクラスを継承するすべてのサブクラスは、これらの 3 つのメソッドのいずれかを実装する必要があります。サブクラスがこれらの単語を実装していない場合、サブクラスは実行されません。実際、インターフェイス クラスは、端的に言えば、クラスのテンプレートであり、クラスの規則です。このカテゴリに属する場合は、どのような方法であっても、私の規則に従わなければなりません。それをどうするかはあなた次第です:
コードは次のとおりです:
クラスBaseShopはShopを実装します
{
パブリック関数 buy($gid)
{
echo('ID:'.$gid.'の製品を購入しました。');
}
パブリック関数 sell($gid)
{
echo('ID: '.$gid.' の商品を販売しました。');
}
パブリック関数ビュー($gid)
{
echo('ID: '.$gid.' の商品を閲覧しました。');
}
}
考えてみてください。多くの人が共同作業する大規模なプロジェクトでは、インターフェイス クラスがあると非常に便利です。そうすることで、特定の関数のメソッド名が何であるかを他の人に尋ねる必要がなくなります。 、私は仕方がありません。
結論:インターフェースクラスはクラスのリーダーであり、方向性を示すものであり、サブクラスは指定されたメソッドを完了しなければなりません。
2.php抽象クラス:abstract
実際、抽象クラスはインターフェイス クラスと部分的に似ています。抽象クラスの役割は、クラスの多くが繰り返し記述している多くのメソッドを使用していることがわかった場合に、抽象クラスの使用を検討できることです。クラスを書き直すことはできないのでしょうか? パブリック クラスごとに、このパブリック クラスをインスタンス化し、同じメソッドを呼び出します。」 それはここでは可能です。実際、これは抽象クラスが行うことですが、省略されています。インスタンス化のステップにより、このクラスのメソッドを直接呼び出すのと同じくらい便利になり、このメソッドをオーバーロードすることもできます。例:
コードは次のとおりです:
抽象クラスBaseShop
{
パブリック関数 buy($gid)
{
echo('ID: '.$gid.'の製品を購入しました。');
}
パブリック関数 sell($gid)
{
echo('ID: '.$gid.' の商品を販売しました。');
}
パブリック関数ビュー($gid)
{
echo('ID: '.$gid.' の商品を閲覧しました。');
}
}
クラス BallShop は BaseShop を拡張します
{
var $itme_id = null;
パブリック関数__construct()
{
$this->itme_id = 2314;
}
パブリック関数open()
{
$this->sell($this->itme_id);
}
}
上記と同様にstoreクラスを定義し、そのbuy、sell、viewの各部分を抽出し、これらのメソッドを抽象クラスに実装し、それを継承するサブクラスが自動的にこれらのメソッドを取得し、サブクラスを取得する例を示します。独自の処理を行い、コードの重複を導入し、再利用性を向上させます。
最後にまとめると、抽象クラスはクラスのサービスプロバイダーです。必要に応じてサービスを提供する必要はありません。それは自分自身です。