ホームページ >バックエンド開発 >PHPチュートリアル >PHP のインターフェイス、抽象クラス、およびインターフェイスと抽象クラスの違いの詳細な説明

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

伊谢尔伦
伊谢尔伦オリジナル
2017-07-03 09:42:5014324ブラウズ

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

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

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

Example

<?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();

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

3. インターフェースにはコンストラクターがありませんが、抽象クラスはコンストラクターを持つことができます。


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

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

抽象クラスまたはインターフェイス

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

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

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