ホームページ  >  記事  >  バックエンド開発  >  PHP のインターフェイスと抽象クラス、およびインターフェイスと抽象クラスの違い

PHP のインターフェイスと抽象クラス、およびインターフェイスと抽象クラスの違い

L
L転載
2020-05-28 09:46:562852ブラウズ

PHP のインターフェイスと抽象クラス、およびインターフェイスと抽象クラスの違い

php では、インターフェイス抽象クラス、Final、および Static は非常にシンプルで、特に大規模な Web サイトのアーキテクチャに役立ちます。今日は php に関する記事を見ていきます。抽象クラス、Final、Static。

1. インターフェイス
(1) インターフェイスの使用は、キーワードimplementsを介して行われます
(2) インターフェイスはメンバー変数 (クラス静的変数を含む) を定義できませんが、定数を定義できます
(3) サブクラスは、インターフェースによって定義されたすべてのメソッドを実装する必要があります
(4) インターフェースはメソッドを定義することのみができますが、実装することはできません
(5) インターフェースにはコンストラクターがありません
(6)インターフェイスとそれをデフォルトで実装するクラス これらはすべて public 型です
2. 抽象クラス
(1) 抽象クラスの使用はキーワード extends
を使用します (2) インスタンス化することはできません。サブクラスが実装しなければならないメソッドを定義できる
(3) サブクラスは親クラス内のすべての抽象メソッドを定義する必要があり、これらのメソッドのアクセス制御は親クラスのアクセス制御と同じ (またはより緩和された) でなければなりません
(4) クラスに抽象メソッドがある場合、そのクラスは抽象クラスとして定義する必要があります
(5) 抽象クラスはコンストラクターを持つことができます
(6) 抽象クラスのメソッドは private、保護され、公開されます。
(7) クラスは複数のインターフェイスを同時に実装できますが、クラスは 1 つの抽象クラスのみを継承できます。
3. 最終クラス/メソッド
(1) 最終クラスは継承できません
(2) 最終メソッドはオーバーライドできません
4. 静的クラス/メソッド
(1) 継承できませんインスタンス化される 分類され、直接アクセスされる
(2) 静的プロパティは、-> 演算子を使用してオブジェクトからアクセスすることはできず、:: メソッドを使用して呼び出されます

<?php 
# 接口
interface Human{ 
    const TEST_CONST = "test const"; // 定义常量
    // public $v; // error,不能定义变量 
    // static $count; // error,不能定义变量 
    public function speak(); 
    public function walk(); 
    public function run(); 
} 
# 抽象类
abstract class Father implements Human{
    public function construct(){ 
        echo "father init n"; 
    }
    abstract public function walk(); // 抽象方法
    public function speak(){ 
        echo "father speak skill n";
    }
    public function run(){
        echo "father run skill n"; 
    }
} 
# 非抽象类
class Mother implements Human{
    public function construct(){
        echo "mother init n";
    }
    # 这里必须实现walk方法 
    public function walk(){ 
        echo "mother walk skill n"; 
    }
    public function speak(){
         echo "mother speak skill n"; 
    }
    public function run(){ 
        echo "mother run skill n"; 
    } 
}
class Son extends Father{ 
    public function walk(){
         echo "son walk skill. n"; 
    }
    public function speak($name = &#39;&#39;){
         echo "son: ". $name ." speak skill. n"; 
    }
    # 访问控制必须和父类中一样(或者更为宽松) 
    protected function sport(){ 
        echo "son sport skill. n"; 
    }
    final public function notTeach(){ 
        echo &#39;son has not to teach skill&#39;; 
    } 
}
 
class Daughter extends Mother{
    public function run($name = &#39;&#39;){ 
        echo "daughter run skill. n"; 
    }
}
final class GrandChild extends Son{
    # 访问控制必须和父类中一样(或者更为宽松) 
    public function sport(){ 
        echo "GrandChild sport skill. n"; 
    }
    # Cannot override final method Son::notTeach() 
    // public function notTeach(){} // error 
}
 
#  Class Orphan may not inherit from final class (GrandChild) 
// class Orphan extends GrandChild{}  // error
$son = new Son(); 
$son->speak("Suly"); 
$daughter = new Daughter(); 
$daughter->run(&#39;Lily&#39;);
$grandChild = new GrandChild();
$grandChild->sport();

抽象クラスとインターフェイスの違い

1. インターフェースの使用は、キーワードimplements を介して行われます。抽象クラスを使用するには、キーワード extends を使用します。もちろん、キーワード extends を使用してインターフェイスを継承することもできます。
2. インターフェース内ではメンバ変数(クラス静的変数を含む)は宣言できませんが、クラス定数は宣言できます。さまざまなタイプのメンバー変数を抽象クラスで宣言して、データのカプセル化を実装できます。 (さらに、JAVA インターフェースのメンバー変数は public static Final 型として宣言する必要があります)
3. インターフェースにはコンストラクターがありませんが、抽象クラスにはコンストラクターを持つことができます。

4. インターフェイスのメソッドはデフォルトでパブリック型ですが、抽象クラスのメソッドはプライベート、プロテクト、パブリックに変更できます。

5. クラスは複数のインターフェイスを同時に実装できますが、クラスは 1 つの抽象クラスからのみ継承できます。

抽象クラスまたはインターフェイス
密接に関連するオブジェクトによって採用されるモデルを作成したい場合は、抽象クラスを使用できます。無関係な多数のオブジェクトに採用される機能を作成する場合は、インターフェイスを使用します。
動作を複数のソースから継承する必要がある場合は、インターフェイスを使用します。
すべてのクラスが共通の動作実装を共有することがわかっている場合は、抽象クラスを使用し、その中で動作を実装します。

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

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

声明:
この記事はphp学习网で複製されています。侵害がある場合は、admin@php.cn までご連絡ください。