PHP abstractとinterfaceの違いを浅く分析する

2336 ワード

1.phpインタフェースクラス:interface
実は彼らの役割はとても简単で、多くの人が一绪にプロジェクトを开発する时、すべて他の人の书いたいくつかのクラスを呼び出すことができて、それではあなたは闻いて、私はどのように彼のある机能の実现方法がどのように命名したことを知っていて、この时phpインタフェースクラスは役割を果たして、私达が1つのインタフェースクラスを定义した时、その中の方式は下のサブクラスが実现しなければなりません例:
1 interface Shop
2 {
3 public function buy($gid);
4 public function sell($gid);
5 public function view($gid);
6 }

     shop   ,       : (buy), (sell), (view),                 3          ,           ,     。         ,        ,      ,       ,          ,       ,         ,   ,     , :
class BaseShop implements Shop
{
public function buy($gid)
{
echo('    ID  :'.$gid.'   ');
}
public function sell($gid)
{
echo('   ID  :'.$gid.'   ');
}
public function view($gid)
{
echo('    ID  :'.$gid.'   ');
}
}

多くの人が協力している大きなプロジェクトの中で、インタフェースクラスがあればどんなに便利なのか考えてみてください.そうすれば、他の人に聞かなくてもいいです.あなたの○○機能の方法名は何ですか.もちろん、もしあなたたちが好きなら、私も仕方がありません.
結論:インタフェースクラスはクラスのリーダーであり、方向を示し、サブクラスはその指定方法を完了しなければならない.
2.php抽象クラス:abstract
実は抽象類とインタフェース類は一部似ていて、どこでこのような言葉を見たか覚えています.抽象類は類像の部分を抽出します.この文は面白そうに見えますが、実は抽象類の真理を話しています.抽象類の役割は、あなたの多くの種類の中で多くの方法で繰り返し書いていることに気づいたら、抽象類を使うことを考えることができます.「クラスごとにクラスを書き換えるのではなく、このクラスをインスタンス化して、同じ方法を呼び出せばいい」と言うかもしれませんが、ここでは可能です.実際に抽象クラスがやっている仕事はこれですが、彼はあなたのインスタンス化のこのステップを省いて、このクラスの方法を直接呼び出すように便利になり、この方法を再ロードすることもできます.次のようになります.
1 abstract class BaseShop
2 {
3 public function buy($gid)
4 {
5 echo('    ID  :'.$gid.'   ');
6 }
7 public function sell($gid)
8 {
9 echo('   ID  :'.$gid.'   ');
10 }
11 public function view($gid)
12 {
13 echo('    ID  :'.$gid.'   ');
14 }
15 }
16 class BallShop extends BaseShop
17 {
18 var $itme_id = null;
19 public function __construct()
20 {
21 $this->itme_id = 2314;
22 }
23 public function open()
24 {
25 $this->sell($this->itme_id);
26 }
27 }
28

ここでは一例ですが、上記のようにショップクラスを定義し、そのすべての像の部分を抽出して、買う(buy)、売る(sell)、見る(view)、抽象クラスでこれらの方法を実現したと思います.それを継承すると、自動的にこれらの方法が得られ、サブクラスは独自のものを作り、コードの重複を紹介し、多重性を高めます.
結論:抽象クラスはクラスのサービスプロバイダで、多くのサービスを持っていて、あなたは使わなくてもいいです.必要なときに使ってもいいです.サービスを提供しないと満足していないと思ったら、自分でやることができます.abstract functionメソッドはinterfaceと似ています.親クラスで宣言されるメソッドで、サブクラスで実装する必要がありますが、abstractで宣言されていないメソッドはサブクラスの共通メソッドになり、サブクラスで実装する必要はありません.
転載元http://www.phpboke.com/php-abstract-and-interface.html