ホームページ  >  記事  >  バックエンド開発  >  PHPにおけるクラス継承とインターフェース継承の違いは何ですか

PHPにおけるクラス継承とインターフェース継承の違いは何ですか

WBOY
WBOYオリジナル
2022-02-21 11:04:032813ブラウズ

PHP では、クラス継承とインターフェイス継承の違いは次のとおりです。PHP クラスは多重継承をサポートしません。つまり、サブクラスは 1 つの親クラスのみを継承できますが、複数レベルの継承をサポートしますが、インターフェイスは多重継承をサポートします。つまり、インターフェイスは 1 つ以上のインターフェイスを継承できます。

PHPにおけるクラス継承とインターフェース継承の違いは何ですか

この記事の動作環境: Windows 10 システム、PHP バージョン 7.1、Dell G3 コンピューター。

phpにおけるクラス継承とインターフェイス継承の違いは何ですか

PHPクラス継承:

1. PHPクラスは多重継承をサポートしません。つまり、サブクラスは多重継承のみをサポートします。親クラスですが、マルチレベルの継承をサポートします

例:

class frist{
  public function __construct(){
    echo "我是第一个类。","<br>";
  }
  public function printer(){
    echo "frist","<br>";
  }
}
class seconds extends frist{}
class third extends seconds{}
$obj = new third();
$obj->printer();

結果: これは最初のクラスです。 frist の 2 番目と 3 番目のクラスは、printer() メソッドをオーバーライドしません。printer() メソッドは、3 番目のクラスがインスタンス化された後に呼び出すことができます。

2. 継承権限の問題

(1) 親クラスのプライベートメソッドは継承できず、親クラスはプライベート化されます

(2) のプロテクトされたメソッド親クラスは継承できますが、インスタンス化されたオブジェクトから呼び出すことはできません。呼び出すと、「保護されたメソッド frist::printer() を呼び出します」というエラー メッセージが表示されます。親クラスはこのメソッドを保護モードにします。

(3) 親クラスのパブリック メソッドは継承でき、インスタンス化されたオブジェクトによって呼び出すことができ、パブリック メソッドです。

(4) サブクラスは親クラスのパブリック メソッドまたは保護されたメソッドをオーバーライドできます。 , ただし、メソッドを再プライベートにすることはできません。同じ名前を持つ場合、このクラスでのみ再宣言できます

3. インターフェイス クラスの継承

(1) インターフェイスは多重継承をサポートし、インターフェイス クラスのメソッドを実装する必要はありません。例:

interface frist{
  public function ex1();
}
interface seconds{
  public function ex2();
}
interface third extends frist,seconds{
  public function ex3();
}
class fourth implements third{
  public function ex1(){}
  public function ex2(){}
  public function ex3(){}
}
class fourth implements frist,seconds{
  public function ex1(){}
  public function ex2(){}
}

(2) インターフェイス クラスのメソッド権限は public、デフォルトは public

(3) インターフェイス クラスのメソッド権限は public です。インターフェイスはインターフェイスのすべてのメソッドを実装する必要があることを指します。そうでない場合は、次のようなエラーが報告されます。「クラス e には 1 つの抽象メソッドが含まれているため、抽象メソッドを宣言するか、残りのメソッドを実装する必要があります。」つまり、クラス e には 1 つの抽象メソッドが含まれます。したがって、残りのメソッドは抽象的に宣言するか実装する必要があります。

4. 抽象クラス: クラス内に抽象メソッドがある限り、このクラスは抽象クラスとして定義する必要があります

(1) 抽象クラスは継承し、抽象クラスはオーバーライドできません親クラスのメソッド。

(2) 抽象クラスの継承は、親クラスのメソッドを拡張したものです。

(3) すべての抽象メソッドは、インスタンス化する前に、継承された派生クラスでオーバーロードする必要があります。

(4) 抽象クラスによって実装された通常のディストリビューションは、非抽象サブクラスで直接呼び出すことができます。

5. インターフェイスと抽象クラスの類似点と相違点 (抽象クラスとインターフェイスの違いを参照)

(1) インターフェイスの使用は、キーワードのimplements を通じて実現され、abstract の場合はクラス クラス継承のキーワード exotends を使用して操作を実装します。

(2) インターフェイスにはデータ メンバーはありませんが、抽象クラスにはデータ メンバーがあり、抽象クラスはデータのカプセル化を実装できます。

(3) インターフェイスにはコンストラクターはありませんが、抽象クラスにはコンストラクターを含めることができます。

(4) インターフェイス内のメソッドはすべてパブリック型ですが、抽象クラス内のメソッドはプライベート、プロテクト、またはパブリックで変更できます。

(5) クラスは複数のインターフェイスを同時に実装できますが、実装できる抽象クラスは 1 つだけです。

(6) 類似点: function getName(); など、関数本体には何も記述できません。

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

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

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