ホームページ >バックエンド開発 >PHPの問題 >PHPの抽象クラスとインターフェースの違いは何ですか

PHPの抽象クラスとインターフェースの違いは何ですか

青灯夜游
青灯夜游オリジナル
2020-10-30 16:47:432993ブラウズ

違い: 1. 抽象クラスは属性、通常のメソッド、および抽象メソッドを持つことができますが、インターフェイスは属性、通常のメソッドを持つことができず、定数を持つことができます; 2. 抽象クラスは、abstract キーワードを持つクラスの前に宣言されます。 、そして、Class はクラスとして宣言され、インターフェイスはインターフェイスで宣言されますが、インターフェイスはクラスではないため、クラスで宣言することはできません。

PHPの抽象クラスとインターフェースの違いは何ですか

推奨: 「PHP ビデオ チュートリアル

オブジェクト指向開発の場合、抽象クラスとインターフェイスは 2 つの要素です理解するのはさらに困難です。次の記事では、PHP の抽象クラスとインターフェイスの違いを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

抽象クラス: クラスに基づいています。それ自体がクラスです。直接インスタンス化できない単なる特別なクラスです。クラス内でメソッドと属性を定義できます。テンプレートと同様に、サブクラスも指定後、詳細な機能を実装できます。

インターフェイス: 主にメソッド仕様に基づいており、抽象メソッドよりも独立している点を除けば、抽象クラスの抽象メソッドに似ています。複数のメソッドを組み合わせることで、クラスを新しいクラスに結合できます。

phpにおける抽象クラスとインターフェースの違い

1. 抽象クラスは属性、通常のメソッド、抽象メソッドを持つことができますが、インターフェースは属性や通常のメソッドを持つことができません定数が存在します。

2. 抽象クラスには抽象メソッドが存在しない可能性がありますが、インターフェイスには「抽象」メソッドが存在する必要があります。

3. 構文に違いがあります

4. 抽象クラス クラスの前に abstract キーワードを使用して宣言すると、クラスはクラスとして宣言されます インターフェイスは、interface で宣言されますが、インターフェイスはクラスではないため、class で宣言することはできません。

5. 抽象クラスの抽象メソッドは abstract で宣言する必要がありますが、インターフェイスはそうである必要はありません

6. 抽象クラスは extends キーワードを使用して、サブクラスが継承できるようにします親クラス。クラスは詳細な抽象メソッドを実装します。インターフェイスは実装を使用して、通常のクラスがクラス内のインターフェイスの詳細なメソッドを実装できるようにし、インターフェイスは一度に複数のメソッドを実装できます。各インターフェイスを区切るにはカンマを使用します。

抽象クラス:

  • 抽象クラスはインスタンス化できません。その役割は、それを継承するすべてのクラスのインターフェイスを定義 (または部分的に実装) することです。

  • 抽象クラスを定義するには、abstract キーワードを使用します。

  • メソッドとプロパティは、通常のクラスと同様に、抽象クラスでも作成できます。ほとんどの場合、抽象クラスには少なくとも 1 つの抽象メソッドが含まれます。抽象メソッドは、abstract キーワードによっても渡されます。 . 宣言した。抽象メソッドにはメソッド宣言のみがあり、メソッド実装はありません。メソッド本体を記述できません。

abstract class ShopProductWriter
{
    protected $product = [];

    /**
     * 抽象类中可以定义普通方法
     */
    public function addProduct($shopProduct)
    {
        $this->product = $shopProduct;
    }

    /**
     * 定义一个抽象方法,只有方法声明,没有方法实现
     */
    abstract public function write();
}
  • 抽象クラスを継承するクラスは、すべての抽象メソッドを実装する必要があります。それ以外の場合は、抽象クラス自体として定義する必要があります。サブクラスは抽象メソッドを実装するだけではなく、メソッドのシグネチャにも従う必要があります。これは、実装メソッドは抽象メソッドよりも厳密なアクセス制御を行うことができないことを意味します。実装メソッドには、抽象メソッドと同じ数のパラメータと同じ型ヒントも必要です。

class XmlProductWriter extends ShopProductWriter
{
    /**
     * 任何继承自抽象类的类都必须实现所有的抽象方法
     */
    public function write()
    {
        echo 'XmlProductWriter';
    }
}

インターフェース:

  • 抽象クラスを使用すると、いくつかの実装を提供できますが、インターフェースは純粋なテンプレートです。インターフェイスは関数を定義するだけであり、実装を持つことはできません。プロパティとメソッドの宣言はできますが、メソッド本体の宣言はできません。

  • interface キーワードを使用してインターフェイスを宣言します。

interface Price
{
    /**
     * 只有方法声明,没有方法实现
     */
    public function getPrice();
}
  • このインターフェイスを実装するクラスは、このインターフェイスによって定義されたすべてのメソッドを実装する必要があります。それ以外の場合、このクラスは抽象クラスとしてのみ宣言できます。

  • クラスの宣言でimplements キーワードを使用すると、クラスにインターフェイスを実装させることができます。

class ShopProduct implements Price
{
    protected $price;

    public function getPrice()
    {
        // TODO: Implement getPrice() method.
        return $this->price;
    }
}
  • 実装クラスは、実装するインターフェイスと同じ型を持ちます。

  • クラスは、親クラスを継承しながら複数のインターフェイスを実装できます。implements キーワードの後に​​は、複数のインターフェイスの名前がカンマで区切られて続きます。

関連する推奨事項: php トレーニング

以上がPHPの抽象クラスとインターフェースの違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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