PHP の抽象クラスとインターフェイス定義
最近読んだいくつかの PHP 参考書では抽象クラスについて言及されていないため、最初にインターフェイスについて紹介します。
インターフェイスを理解すると、抽象クラスも非常に理解しやすいと感じます。
サンプルコードは何気なく書いたものです。サンプル コードは非常に優れており、テスト後にエラーは報告されません。コードを読むのが面倒な人でもテキストが表示されます。栗がうまく持ち上げられない。
コードテスト環境: php5.3.29
インターフェース(インターフェース):
インターフェースはフレームワークの構築やコードの分業を容易にするための合意や仕様に相当する抽象化のために生まれました。
抽象メソッドの名前、パラメータ、メンバー定数を指定しますが、特定のメソッドや変数を含めることはできません
個人的には、PHP は型付けが弱く、柔軟性を重視している言語だと思います。 Java と比較すると、PHP のインターフェイスの型要件は緩すぎます。あまり使いにくいため、大量に使用することはお勧めできません。
1) すべてのインターフェイスは抽象メソッドです。 (サブクラスの実装に使用するため、publicまたはprotectedである必要があります。)
2) インターフェイス内に特定のメソッドを含めることはできず、メンバー定数のみが存在できます。
3) PHPはJava C++などの強く型付けされた言語とは異なり、弱く型付けされており、動的型自体は戻り値の型を指定しません。パラメータのデータ型は、4つを除いて記述できます。基本的な型は指定できないため、メソッドの戻り値やパラメータの型に要件はありません。
4) クラスは複数のインターフェースを実装できます。使用法:implements キーワードの後に、カンマで区切って複数のインターフェイスを実装します。
interface Car { const name = "车子"; public function run($speed=400,$time=300); } class Xiali implements Car { public function run($s=100,$t=200){//参数个数必须相同 echo '哈哈 我会跑'; return 'abc'; } public function fly() { echo '哈哈我会飞'; } }
抽象クラス (abstract class): サブクラスの機能を標準化するためのインターフェースと同じ機能を持ちますが、インターフェースよりも具体的な内容が含まれます。
1) 少なくとも 1 つの抽象メソッドを含むクラス (つまり、どのクラスにも 1 つ以上の抽象メソッドがある限り、このクラスは抽象クラスでなければなりません。)
2) インターフェイスのような抽象クラスは、次のことはできません。インスタンス化される変更。これは抽象的と呼ばれるものですが、なぜインスタンス化するのでしょうか? 例はすべて具体的です。 2333.
3) 要約: 抽象クラスと通常のクラスの違い: 1. 少なくとも 1 つの抽象メソッドが含まれる 2. インスタンス化できない。他はすべて同じです。
4) 使用法:
abstract class Father{ abstract function func1();//至少一个抽象方法。 public function func2(){//具体方法随便写。 echo 'func2'; $this->func3(); } private function func3(){ echo '一个private方法'; } }
継承した抽象メソッドを実装する場合
/** * 继承抽象类 * 必须实现其所有抽象方法 * 和普通一样,一个类也只能继承一个抽象类 */ class Son extends Father { public function func1() { echo '实现(重写)抽象方法。参数名个数必须相同' } }