ホームページ > バックエンド開発 > PHPチュートリアル > PHP、クラスとオブジェクト

PHP、クラスとオブジェクト

Barbara Streisand
リリース: 2024-12-29 14:42:11
オリジナル
880 人が閲覧しました

PHP, Classes and Objects

PHP のクラスとオブジェクト

PHP は Java と同様、オブジェクト指向プログラミングをサポートし、クラスとオブジェクトをコア構成要素として使用します。これらの概念を理解することは、PHP をマスターするために不可欠です。このガイドでは、PHP のクラスとオブジェクトについて知っておくべきことをすべて説明します。

クラスの定義

PHP のクラスは、オブジェクトを作成するための設計図です。これは、クラスのオブジェクトが持つ構造と動作を定義します。

構文

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

オブジェクトの作成

オブジェクトはクラスのインスタンスです。 new キーワードを使用してクラスからオブジェクトを作成します。

構文

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

プロパティとメソッド

プロパティ (フィールドとも呼ばれる) はオブジェクトの状態を表し、メソッドはオブジェクトの動作を定義します。

プロパティ

プロパティは、オブジェクトのデータを保持する変数です。

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

メソッド

メソッドは、オブジェクトの動作を記述するクラス内で定義された関数です。

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

コンストラクター

コンストラクターは、オブジェクトがインスタンス化されるときに自動的に呼び出される特別なメソッドです。新しく作成されたオブジェクトを初期化します。

デフォルトのコンストラクター

コンストラクターが定義されていない場合、PHP は引数のないデフォルトのコンストラクターを提供します。

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

パラメータ化されたコンストラクタ

パラメータ化されたコンストラクターを使用すると、オブジェクトを特定の値で初期化できます。

class Car {
    public $color;
    public $model;
    public $year;

    // Parameterized constructor
    public function __construct($color, $model, $year) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー

パラメータ化されたコンストラクターの使用

class Main {
    public function run() {
        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー

コンストラクターのオーバーロード

PHP は Java のようなメソッドのオーバーロードをネイティブにサポートしていませんが、オプションのパラメーターを使用するか、単一のコンストラクター内で手動で引数を処理することによって、それをシミュレートできます。

class Car {
    public $color;
    public $model;
    public $year;

    // Simulating constructor overloading
    public function __construct($color = "Unknown", $model = "Unknown", $year = 0) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー

シミュレートされたオーバーロードされたコンストラクターの使用

class Main {
    public function run() {
        $defaultCar = new Car();
        $defaultCar->displayInfo();

        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー

PHP のカプセル化、アクセス修飾子、および静的メンバー

カプセル化

PHP のカプセル化とは、データ (プロパティ) とメソッド (関数) をクラス内にバンドルする方法です。これにより、オブジェクトの内部状態が外部の干渉や誤用から安全であることが保証されます。

アクセス修飾子

PHP のアクセス修飾子は、プロパティ、メソッド、コンストラクターの可視性とアクセス可能性を制御します。 PHP は 3 つの主要なアクセス修飾子をサポートしています:

  • パブリック: どこからでもアクセス可能。
  • 保護: クラス、サブクラス、および同じパッケージ内でアクセス可能です。
  • private: 定義クラス内でのみアクセス可能です。

使用例:

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

静的メンバー

PHP の静的メンバーは、特定のインスタンスではなくクラス自体に関連付けられます。クラスのオブジェクトを作成せずにアクセスできます。

静的プロパティ:

静的プロパティは、クラスのすべてのインスタンス間で共有されます。これらは static キーワードを使用して宣言されます。

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

静的メソッド:

静的メソッドは、static キーワードを使用して宣言されます。これらはインスタンスではなくクラスに属します。

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

静的メンバーへのアクセス:

静的メンバーには、オブジェクトではなくクラス名を使用してアクセスします。

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP のアクセス修飾子

PHP のアクセス修飾子は、クラス メンバーの可視性を制御し、カプセル化を保証し、アクセス制限を強制します。

アクセス修飾子の種類

  1. 公開
  2. 保護されています
  3. プライベート

1.公共

  • アクセス可能場所: どこからでも。
  • 使用法: 広くアクセスできる必要があるメンバーには public を使用します。
class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2.保護されている

  • 次の場所からアクセス可能: クラスおよびそのサブクラス内。
  • 使用法: クラス階層内でのみアクセスする必要があるメンバーには protected を使用します。
class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3.プライベート

  • アクセス元: クラス内のみ。
  • 使用法: 定義クラスの外部からアクセスすべきでないメンバーには private を使用します。
class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP の非アクセス修飾子

PHP の非アクセス修飾子は、可視性に影響を与えることなく、クラス メンバーの動作を変更します。

非アクセス修飾子の種類

  1. 静的
  2. 決勝
  3. 要約

1.静的

  • 使用法: インスタンスではなくクラスに属するプロパティとメソッドを宣言します。
  • 例:
class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

2.決勝

  • 使用法: メソッドのさらなる変更やクラスの継承を防ぎます。
  • 変数: PHP は Final 変数をサポートしません。
  • メソッド: 最終メソッドはオーバーライドできません。
  • クラス: 最終クラスは延長できません。
  • 例:
class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. 要約

  • 使用法: 不完全なため、サブクラスで実装する必要があるクラスとメソッドを宣言します。
  • 抽象クラス: インスタンス化できません。
  • 抽象メソッド: 本体なしで宣言され、サブクラスによって実装される必要があります。
  • 例:
$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP およびアクセス修飾子の継承

継承

PHP における継承は、あるクラス (サブクラス) が別のクラス (スーパークラス) のプロパティとメソッドを継承できるメカニズムです。これにより、コードの再利用が容易になり、クラス間の階層関係の作成が可能になります。

継承の構文

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

この例では:

  • Animal は、プロパティ $name とメソッド Eat() を持つスーパークラスです。
  • Dog は、Animal から $name と Eat() を継承し、独自のメソッド bark() を追加したサブクラスです。

継承におけるアクセス修飾子

PHP のアクセス修飾子は、サブクラスやプログラムの他の部分のクラス メンバーの可視性を決定します。これらは継承において重要な役割を果たします。

通常の属性とメソッドのアクセス修飾子

  • パブリック: どこからでもアクセス可能。
  • 保護: クラス、サブクラス内、および同じパッケージ内でアクセス可能です。
  • private: 宣言されているクラス内でのみアクセスできます。
class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

静的属性とメソッドのアクセス修飾子

PHP の静的メンバーは、特定のインスタンスではなくクラスに関連付けられます。これらは、継承における非静的メンバーと同じアクセス ルールに従います。

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

静的メソッドは継承されますか?

静的メソッドは PHP で継承されますが、インスタンス メソッドと同じ意味でオーバーライドすることはできません。サブクラスが同じ名前の静的メソッドを定義すると、親クラスの静的メソッドが非表示になります。

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

抽象メソッドのアクセス修飾子

PHP の抽象メソッドは抽象クラスで定義する必要があります。スーパークラスでの抽象メソッドの可視性によって、サブクラスでのその抽象メソッドの可視性が決まります。サブクラスは、同じか、より制限の少ないアクセス修飾子を持つ抽象メソッドを実装する必要があります。

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

Final 属性とメソッドのアクセス修飾子

PHP の Final メソッドはサブクラスでオーバーライドできません。また、Final クラスを拡張することもできません。

  • 最終メソッド: メソッドのオーバーライドを防ぎます。
  • 最終クラス: 継承を防止します。
$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP で最上位クラスを宣言するための構文

PHP では、トップレベル クラス (他のクラス内にネストされていないクラス) の宣言は、キーワードの特定の順序に従います。宣言には、アクセス修飾子、抽象キーワードまたは最終キーワード、クラス キーワードを含めることができます。

使用できるキーワード:

  1. アクセス修飾子: public
  2. クラスタイプ: 抽象または最終

注文:

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

構文:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

重要な注意事項:

  1. 何も指定されていない場合、PHP はデフォルトのアクセス修飾子として public を想定します。
  2. クラスを同時に抽象クラスと最終クラスにすることはできません。
  3. protected アクセス修飾子と private アクセス修飾子は、最上位クラスでは許可されません。

例:

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP のクラスで属性を宣言するための構文

使用できるキーワード:

  1. アクセス修飾子: public、protected、private
  2. 静的修飾子: 静的
  3. 不変修飾子: 読み取り専用 (PHP 8.1 で導入)

注文:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

構文:

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

重要な注意事項:

  1. アクセス修飾子が指定されていない場合、属性はデフォルトで public になります。
  2. 静的属性はインスタンスではなくクラスに属します。
  3. readonly 属性は、宣言時またはコンストラクター (PHP 8.1 ) で 1 回だけ初期化できます。

例:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP のクラスでメソッドを宣言するための構文

使用できるキーワード:

  1. アクセス修飾子: public、protected、private
  2. 静的修飾子: 静的
  3. 最終修飾子: Final
  4. 抽象修飾子: 抽象

注文:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

構文:

class Car {
    public $color;
    public $model;
    public $year;

    // Parameterized constructor
    public function __construct($color, $model, $year) {
        $this->color = $color;
        $this->model = $model;
        $this->year = $year;
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー

重要な注意事項:

  1. アクセス修飾子が指定されていない場合、メソッドはデフォルトで public になります。
  2. 静的メソッドはインスタンスではなくクラスに属します。
  3. Final メソッドはサブクラスでオーバーライドできません。
  4. 抽象メソッドは抽象クラスで宣言する必要があり、本体を持つことはできません。

例:

class Main {
    public function run() {
        $myCar = new Car("Red", "Tesla", 2022);
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー

PHP の抽象クラス

PHP の抽象クラスは、他のクラスのブループリントを定義するために使用される Java の抽象クラスに似ています。これらには、抽象メソッド (実装のないメソッド) と具象メソッド (実装のあるメソッド) の両方が含まれます。抽象クラスは、abstract キーワードを使用して宣言され、直接インスタンス化することはできません。


1. 抽象クラスの概要

抽象クラスは、派生クラスの基本クラスとして機能します。サブクラスの共通の動作を定義すると同時に、それらのサブクラスでの特定のメソッドの実装を許可します。


2. 抽象クラスの宣言

PHP で抽象クラスを宣言するには、class キーワードの前に abstract キーワードを使用します。

例:

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. 抽象メソッド

抽象メソッドは抽象クラスで定義されていますが、本体はありません。サブクラスはすべての抽象メソッドを実装する必要があります。

例:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4. 具体的な方法

抽象クラスの具象メソッドには本体があり、そのままサブクラスに継承することも、オーバーライドすることもできます。

例:

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

5. サブクラスの作成

抽象クラスのサブクラスは、そのサブクラスが抽象として宣言されていない限り、そのすべての抽象メソッドを実装する必要があります。

例:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

6. 抽象クラスのインスタンス化

抽象クラスは直接インスタンス化できません。インスタンスを作成するには、具象サブクラスを使用する必要があります。

例:

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

7. 抽象クラスのコンストラクター

抽象クラスはコンストラクターを持つことができ、そのコンストラクターはサブクラスがインスタンス化されるときに呼び出されます。

例:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

8. フィールドとメソッドを備えた抽象クラス

抽象クラスにはインスタンス変数と具象メソッドを含めることができ、サブクラスに再利用可能な機能を提供します。

例:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

9. 抽象クラスの静的メソッド

抽象クラスには静的メソッドを含めることができます。静的メソッドはクラスに属しており、インスタンス化せずに呼び出すことができます。

例:

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

PHP で抽象クラスを宣言するための構文

使用できるキーワード:

  1. 要約
  2. public、protected、private (アクセス修飾子)

注文:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

例:

抽象メソッドと具象メソッドを備えた抽象クラス

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

フィールドと最終メソッドを含む抽象クラス

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

重要な注意事項:

  1. 抽象クラスは直接インスタンス化できません。
  2. 抽象メソッドは非抽象サブクラスによって実装する必要があります。
  3. すべての抽象メソッドを実装していないサブクラスも抽象として宣言する必要があります。
  4. 抽象クラスの具象メソッドは、サブクラスがオーバーライドするオプションです。
  5. 抽象クラスにはコンストラクター、プロパティ、定数を含めることができます。
  6. 抽象クラスは、そのメソッドとプロパティに対して任意の可視性修飾子を使用できます。

PHP のインターフェース

PHP のインターフェイスは、それを実装するクラスのコントラクトを定義します。これはクラスが実装する必要があるメソッドを指定しますが、メソッド実装自体は提供しません。インターフェイスにより、より柔軟でモジュール化されたコードが可能になり、継承階層に関係なく、クラスが共通のメソッド シグネチャ セットに準拠できるようになります。


1. インターフェースの概要

PHP のインターフェイスは抽象クラスに似ていますが、実装せずにメソッド シグネチャのみを定義できます。インターフェイスを実装するクラスは、インターフェイスで宣言されたすべてのメソッドの実装を提供する必要があります。クラスは複数のインターフェイスを実装できるため、インターフェイスは PHP の動作の多重継承サポートの重要な部分になります。


2. インターフェースの宣言

インターフェイスを宣言するには、interface キーワードを使用します。インターフェイスには、メソッド宣言 (メソッド本体は不可)、定数、および抽象メソッドのみを含めることができます。

例:

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

3. インターフェースの実装

インターフェースを実装するクラスは、インターフェースで宣言されたすべてのメソッドの実装を提供する必要があります。クラスはカンマで区切って複数のインターフェースを実装できます。

例:

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

4. インターフェースメソッドの署名

インターフェース内のメソッドは本体を持つことができず、パブリックである必要があります。クラスがインターフェイスを実装する場合、メソッド シグネチャを含め、インターフェイスで宣言されたとおりにこれらのメソッドを正確に実装する必要があります。

例:

class Car {
    public $color;
    public $model;
    public $year;

    // Default constructor
    public function __construct() {
    }

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

5. 複数のインターフェースの実装

PHP のクラスは複数のインターフェースを実装できます。これにより、クラスがさまざまなコントラクトに準拠できるシステムをより柔軟に設計できるようになります。

例:

class ClassName {
    // Properties (Fields)
    // Methods
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

6. インターフェース定数

インターフェースには定数を含めることができます。これらの定数は自動的にパブリックになり、インターフェイスを実装する任意のクラスからアクセスできます。

例:

class Car {
    // Properties
    public $color;
    public $model;
    public $year;

    // Methods
    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

7. インターフェースの継承

インターフェースは別のインターフェースを拡張できます。これは、子インターフェイスが親インターフェイスからすべてのメソッド (シグネチャ) を継承し、新しいメソッドを追加することもできることを意味します。子インターフェースを実装するクラスは、親インターフェースと子のインターフェースの両方からすべてのメソッドを実装する必要があります。

例:

$objectName = new ClassName();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

8. インターフェースの静的メソッド

インターフェイスには静的メソッドを含めることはできません。インターフェイスで宣言されるすべてのメソッドはインスタンス メソッドである必要があります。インターフェースは実装クラスのインスタンスレベルのコントラクトを定義するため、インターフェースでは静的メソッドは許可されません。


PHP でインターフェイスを宣言および実装するための構文

使用できるキーワード:

  1. インターフェース
  2. 公開

注文:

class Main {
    public function run() {
        $myCar = new Car(); // Creating an object of the Car class
        $myCar->color = "Red";
        $myCar->model = "Tesla";
        $myCar->year = 2022;
        $myCar->displayInfo();
    }
}

$main = new Main();
$main->run();
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

例:

メソッドシグネチャを使用したインターフェイス

class Car {
    public $color;
    public $model;
    public $year;
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

複数の実装とのインターフェイス

class Car {
    public $color;
    public $model;
    public $year;

    public function displayInfo() {
        echo "Model: " . $this->model . "\n";
        echo "Color: " . $this->color . "\n";
        echo "Year: " . $this->year . "\n";
    }
}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

重要な注意事項:

  1. インターフェイス メソッド: インターフェイス内のメソッドはパブリックである必要があり、本体を持つことはできません。
  2. 複数のインターフェースの実装: クラスはカンマで区切って複数のインターフェースを実装できます。
  3. アクセス修飾子: インターフェイス内のすべてのメソッドは暗黙的にパブリックです。 private や protected などのアクセス修飾子は許可されません。
  4. インターフェイス定数: インターフェイスは、自動的にパブリックになり、実装クラスによってアクセスできる定数を宣言できます。
  5. インターフェイスの継承: インターフェイスは、メソッド シグネチャを組み合わせて 1 つ以上のインターフェイスを拡張できます。
  6. 静的メソッド: インターフェイスには静的メソッドを含めることはできません。
  7. すべてのメソッドの実装: クラスは、実装するインターフェイスによって定義されたすべてのメソッドを実装する必要があります。

以上がPHP、クラスとオブジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート