タグ: 抽象クラスインターフェース抽象クラスとインターフェースphp
はじめに: これは面接でよく聞かれる質問であり、古典的な質問でもあります。この記事に記載されている内容の正確性を証明するために、公式の権威ある指示を引用したり、実験を実施したりするよう最善を尽くします。
公式の説明についてはドキュメントを確認してください。以下は公式の説明の簡略版です:
抽象として定義されたクラスはインスタンス化できません。クラス内の少なくとも 1 つのメソッドが抽象宣言されている場合、クラスは抽象宣言されている必要があります。 (抽象クラスは抽象メソッドを持たない可能性がありますが、それでも抽象クラスをインスタンス化することはできません。) 抽象として定義されたメソッドは、その呼び出しメソッド (パラメーター) を宣言するだけであり、その特定の関数の実装を定義することはできません。 たとえば、
abstract class AbstractClass { // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{} abstract protected function getValue (); abstract protected function prefixValue ( $prefix ); // 普通方法(非抽象方法) public function printOut () { print $this -> getValue () . "\n" ; } }
b=1) と同様、$b がオプションのパラメーター
) を定義しますが、サブクラスの宣言にはそのようなものはありません。親クラスの抽象メソッド 2 つのステートメントの間に競合はありません。これは、PHP 5.4 以降のコンストラクターにも当てはまります。 PHP 5.4 より前のコンストラクター宣言は異なる可能性があります。abstract class Sutdent extends Human{ abstract private function study();}
abstract class Human{ abstract function eat();}abstract class Sutdent extends Human{ abstract function study(); //abstract function eat(); 若重写抽象父类的抽象方法eat()会报错}
致命的なエラー: 抽象関数 Human::eat() を継承できません (以前は Sutdent で抽象宣言されていました) ) D:11index.php の 11 行目
1. インターフェースの定義インターフェース (インターフェース) を使用すると、クラスが実装する必要があるメソッドを指定できますが、特定のメソッドを定義する必要はありません。これらのメソッドの内容。Interface
定数: 定数はインターフェースでも定義できます。インターフェイス定数はクラス定数とまったく同じように使用されますが、サブクラスまたはサブインターフェイスによってオーバーライドすることはできません。 (この方法で使用することはお勧めできません。本当に意味が思いつきません。抽象クラスとの混乱を引き起こしやすいです)
interface Play { const LEVEL=10; public function PlayLOL(); public function PlayFootball(); }
追加:
抽象クラスの継承とインターフェイスの実装を同時に行うことができます。拡張は前に記述する必要があり、メソッドを書き直す必要はありません。インターフェイスは、別のインターフェイスまたは複数のインターフェイスを継承したり、extends キーワードを使用したり、複数のインターフェイスを ',' で区切ることができますが、別のインターフェイスを実装することはできず、もちろん、抽象クラス (継承抽象クラス エラー:
extends 演算子を使用してインターフェイスを継承することもできます。
インターフェイスを実装するには、クラスはインターフェイスで定義されたメソッドをまったく同じ方法で使用する必要があります。そうしないと、致命的なエラーが発生します。
インターフェイスの継承interface Play { const LEVEL=10; public function PlayLOL(); public function PlayFootball(); } interface Read { public function ReadNovel(); } abstract class Human{ abstract function eat();}//抽象类可以实现接口后不实现其方法,可以继承一个抽象类的同时实现多个接口注意必须要把extends语句写在implements前面,否则会报错abstract class Sutdent extends Human implements Play,Read{ abstract function study();}ログイン後にコピー
) 簡単に要約しましょう: 抽象クラスは通常、エンティティのタイプを定義するために使用されます それは何ですか? これには、属性、抽象メソッド、および非抽象メソッドが含まれます。インターフェイスは、エンティティのタイプが実行できることを定義するために使用されます。一般に、インターフェイスには抽象メソッドのみがあり、定数はほとんど使用されないと考えられています。 関連する推奨事項: PHP 抽象クラスとインターフェイスの違い 以上がPHPの抽象クラスとインターフェースの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。interface Play {
public function PlayFootball(); }interface Play1 {
public function PlayFootball(); }interface PlayGame extends play,Play1{
public function PlayLOL(); }