この記事では、PHP 抽象クラスとインターフェイスの違いを紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
#抽象クラス
正式な説明についてはドキュメントを確認してください。公式の説明は以下のとおりです。 説明の簡略版:
を 定義することはできません。特有の機能が実現されます。
例:abstract class AbstractClass { // 强制要求子类定义这些方法,且不能定义具体功能 注意没有大括号{} abstract protected function getValue (); abstract protected function prefixValue ( $prefix ); // 普通方法(非抽象方法) public function printOut () { print $this -> getValue () . "\n" ; } }
$b はオプションのパラメータ ) を定義しているが、それが次の抽象メソッドの宣言に含まれていない場合、親クラスの場合、2 つのステートメントの間に競合はありません。これは、PHP 5.4 以降のコンストラクターにも当てはまります。 PHP 5.4 より前のコンストラクター宣言は異なる可能性があります。
補足:
1. 抽象クラスはメンバー属性を持つことができます。 2. 誰かが尋ねました: 抽象メソッドはプライベートとして定義できますか? 答えはノーです、なぜなら抽象インターフェイスの目的は継承のためにクラス モデルを抽象化することだからです。これはプライベートとして定義されており、アクセスできません設計目的が満たされていない場合は、エラーが報告されます。 3. 抽象クラスはインターフェイスを実装でき、そのメソッドを実装する必要はありませんabstract class Sutdent extends Human { abstract private function study(); } Fatal error: Abstract function Sutdent::study() cannot be declared private in ...
継承することはできません抽象親クラスの抽象メソッドを上書きします。このような使用法は、抽象クラスの拡張として理解できます。例:
abstract class Human { abstract function eat(); } abstract class Sutdent extends Human { abstract function study(); //abstract function eat(); 若重写抽象父类的抽象方法eat()会报错 Fatal error: Can't inherit abstract function Human::eat() (previously declared abstract in Sutdent) in ... }
Interface
1. インターフェイスの定義
interface Play { const LEVEL=10; public function PlayLOL(); public function PlayFootball(); }
2. 実装インターフェイスの
implements 演算子を使用します。非抽象クラスは、インターフェイスで定義されたすべてのメソッドを実装する必要があります。実装しない場合は、致命的なエラーが報告されます。クラスは複数のインターフェイスを実装できます。複数のインターフェイスの名前を区切るにはカンマを使用します。
追加:
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(); }
#3. インターフェイスの継承#インターフェイスは別のインターフェイスまたは複数のインターフェイスを継承でき、extends キーワードを使用して、複数の区切り文字を使用します。 ',' ただし、別のインターフェイスを実装することはできません。また、抽象クラスを継承することもできません (抽象クラスを継承するときのエラー:
致命的エラー: PlayGame は Human を実装できません - これは D のインターフェイスではありません: \11 \index.php on line 10)interface Play
{
public function PlayFootball();
}
interface PlayNew
{
public function PlayFootballNew();
}
interface PlayGame extends play,PlayNew
{
public function PlayLOL();
}
違い: 1. インターフェースの継承にimplementsを使用する, 抽象クラスは extends を使用します。
2. インターフェイスでは変数は宣言できませんが、クラス定数は宣言できます。抽象クラスではさまざまな変数を宣言できます。
3. インターフェイスにはコンストラクターはありませんが、抽象クラスは可能です。 はい
4. インターフェイスのメソッドはデフォルトで public であり、抽象クラスのメソッドは public、protected、private
で変更できます。 5. クラスは継承できます。複数のインターフェイスがありますが、継承できるのは抽象クラスのみです
関連する推奨事項: PHP チュートリアル
以上がPHPの抽象クラスとインターフェースの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。