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 は 3 つの主要なアクセス修飾子をサポートしています:
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 のアクセス修飾子は、クラス メンバーの可視性を制御し、カプセル化を保証し、アクセス制限を強制します。
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"; } }
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 }
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();
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; }
この例では:
PHP のアクセス修飾子は、サブクラスやプログラムの他の部分のクラス メンバーの可視性を決定します。これらは継承において重要な役割を果たします。
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"; } }
PHP の Final メソッドはサブクラスでオーバーライドできません。また、Final クラスを拡張することもできません。
$objectName = new ClassName();
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"; } }
$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"; } }
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 の抽象クラスに似ています。これらには、抽象メソッド (実装のないメソッド) と具象メソッド (実装のあるメソッド) の両方が含まれます。抽象クラスは、abstract キーワードを使用して宣言され、直接インスタンス化することはできません。
抽象クラスは、派生クラスの基本クラスとして機能します。サブクラスの共通の動作を定義すると同時に、それらのサブクラスでの特定のメソッドの実装を許可します。
PHP で抽象クラスを宣言するには、class キーワードの前に abstract キーワードを使用します。
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"; } }
抽象クラスの具象メソッドには本体があり、そのままサブクラスに継承することも、オーバーライドすることもできます。
$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"; } }
抽象クラスにはインスタンス変数と具象メソッドを含めることができ、サブクラスに再利用可能な機能を提供します。
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 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"; } }
$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 のインターフェイスは抽象クラスに似ていますが、実装せずにメソッド シグネチャのみを定義できます。インターフェイスを実装するクラスは、インターフェイスで宣言されたすべてのメソッドの実装を提供する必要があります。クラスは複数のインターフェイスを実装できるため、インターフェイスは PHP の動作の多重継承サポートの重要な部分になります。
インターフェイスを宣言するには、interface キーワードを使用します。インターフェイスには、メソッド宣言 (メソッド本体は不可)、定数、および抽象メソッドのみを含めることができます。
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"; } }
インターフェース内のメソッドは本体を持つことができず、パブリックである必要があります。クラスがインターフェイスを実装する場合、メソッド シグネチャを含め、インターフェイスで宣言されたとおりにこれらのメソッドを正確に実装する必要があります。
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 }
インターフェースには定数を含めることができます。これらの定数は自動的にパブリックになり、インターフェイスを実装する任意のクラスからアクセスできます。
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();
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、クラスとオブジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。