PHP - クラスとオブジェクト
ようこそ、志を抱くプログラマーさんたち!今日は、PHPのクラスとオブジェクトの興味深い世界に飛び込みます。これらの用語が少し脅威に思えるかもしれませんが、このレッスンの終わりには、自分でクラスとオブジェクトを作成できるプロフェッショナルになるでしょう!
クラスとオブジェクトとは?
コードに飛び込む前に、まずクラスとオブジェクトとは何かを理解しましょう。例えば、家を建てるとします。クラスはその家の設計図で、オブジェクトはその設計図に基づいて建てられた実際の家です。一つの設計図(クラス)から多くの家(オブジェクト)を作ることができます。
PHPでクラスを定義する
まず、私たちの最初のPHPクラスを作成しましょう。シンプルなCar
クラスを作成します。
<?php
class Car {
// クラスプロパティ
public $brand;
public $color;
// クラスメソッド
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
?>
これを分解すると:
-
class
キーワードから始めて、クラス名(この場合、Car
)を指定します。 - クラス内部で、プロパティ(変数)を定義します(
$brand
と$color
)。 - メソッド(関数)
startEngine()
を定義します。
クラスからオブジェクトを作成する
今、私たちのCar
クラスがありますので、いくつかの車のオブジェクトを作成しましょう!
<?php
// 車のオブジェクトを作成
$myCar = new Car();
$myCar->brand = "Toyota";
$myCar->color = "Red";
$friendsCar = new Car();
$friendsCar->brand = "Honda";
$friendsCar->color = "Blue";
// オブジェクトのメソッドを使用
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
出力:
Vroom! The Red Toyota is starting.
Vroom! The Blue Honda is starting.
ここで起こっていることは以下の通りです:
-
new
キーワードを使用して、Car
クラスのオブジェクトを作成します。 - 各オブジェクトのプロパティを設定するために、アロー(
->
)演算子を使用します。 - 各オブジェクトで
startEngine()
メソッドを呼び出します。
コンストラクタメソッド
今、私たちのクラスを少し洗練されたものにするために、コンストラクタを追加しましょう。コンストラクタはオブジェクトが作成されたときに呼び出される特別なメソッドです。
<?php
class Car {
public $brand;
public $color;
// コンストラクタ
public function __construct($brand, $color) {
$this->brand = $brand;
$this->color = $color;
}
public function startEngine() {
return "Vroom! The $this->color $this->brand is starting.";
}
}
// コンストラクタを使用して車のオブジェクトを作成
$myCar = new Car("Toyota", "Red");
$friendsCar = new Car("Honda", "Blue");
echo $myCar->startEngine();
echo $friendsCar->startEngine();
?>
コンストラクタを使用することで、オブジェクトを作成する際にbrand
とcolor
を設定することができ、コードがクリーンで効率的になります。
継承
OOPの強力な機能の一つに継承があります。これは、既存のクラスを基に新しいクラスを作成できることを指します。私たちのCar
クラスを継承するElectricCar
クラスを作成しましょう。
<?php
class ElectricCar extends Car {
public $batteryLife;
public function __construct($brand, $color, $batteryLife) {
parent::__construct($brand, $color);
$this->batteryLife = $batteryLife;
}
public function chargeBattery() {
return "The $this->color $this->brand is charging. Current battery life: $this->batteryLife%";
}
}
$teslaModel3 = new ElectricCar("Tesla", "White", 80);
echo $teslaModel3->startEngine();
echo $teslaModel3->chargeBattery();
?>
出力:
Vroom! The White Tesla is starting.
The White Tesla is charging. Current battery life: 80%
ここで、ElectricCar
はCar
のすべてのプロパティとメソッドを継承し、独自のプロパティ($batteryLife
)とメソッド(chargeBattery()
)を追加しています。
アクセス修飾子
OOPでは、プロパティとメソッドの可視性を制御するアクセス修飾子を使用できます。以下の3種類があります:
修飾子 | 説明 |
---|---|
public | どこからでもアクセス可能 |
protected | クラス内部および派生クラスからアクセス可能 |
private | クラス内部のみでアクセス可能 |
私たちのCar
クラスをこれらを使用して修正しましょう:
<?php
class Car {
protected $brand;
private $engineStarted = false;
public function __construct($brand) {
$this->brand = $brand;
}
public function startEngine() {
$this->engineStarted = true;
return "The $this->brand's engine is now running.";
}
public function isEngineRunning() {
return $this->engineStarted;
}
}
$myCar = new Car("Toyota");
echo $myCar->startEngine();
echo $myCar->isEngineRunning() ? "Engine is running" : "Engine is off";
// これはエラーを引き起こします: echo $myCar->engineStarted;
?>
今、$brand
はprotected(子クラスからアクセス可能)、$engineStarted
はprivate(Car
クラス内部のみでアクセス可能)、メソッドはpublicのままです。
結論
おめでとうございます!あなたは刚刚PHPのオブジェクト指向プログラミングの世界への第一歩を踏み出しました。クラス、オブジェクト、コンストラクタ、継承、アクセス修飾子について学びました。これらの概念はOOPの基盤を形成し、あなたのプログラミングの旅に役立つでしょう。
忘れてはならないのは、練習が成功の鍵です。自分でクラスを作成し、さまざまなプロパティとメソッドを試してみてください。間違えても構いません。それが学びの過程です!编程を楽しんでください!
Credits: Image by storyset