PHP のクラス(class)とオブジェクトの基本
新人
「PHPでクラスやオブジェクトってよく聞くけど、どういう意味なんですか?」
先輩
「クラスは、PHPでオブジェクト指向を実現するための設計図のようなものだよ。そして、オブジェクトはその設計図を元に実際に作られたものだ。」
新人
「設計図って言われても、少し分かりにくいですね。」
先輩
「では、具体的にクラスとオブジェクトについて、基本から説明していこう。」
1. PHPのクラス(class)とは?(基本的な説明)
PHPのクラスとは、オブジェクト指向プログラミングを行うための「設計図」のようなものです。クラスは、変数や関数をまとめたものです。変数は「プロパティ」、関数は「メソッド」と呼ばれ、クラス内で使います。
例えば、「車」というクラスを作ったとしましょう。このクラスには、車の色やモデル名、速度などの情報(プロパティ)と、車を走らせるための関数(メソッド)が含まれます。
class Car {
public $color;
public $model;
public function startEngine() {
echo "エンジンがスタートしました!";
}
}
上記のコードでは、Car
というクラスを定義しました。このクラスには、車の色やモデルを保存するためのプロパティ($color
、$model
)と、エンジンを始動するメソッド(startEngine()
)があります。
2. PHPのオブジェクトとは?(クラスとオブジェクトの関係)
オブジェクトは、クラスを元に実際に作られた「インスタンス」です。クラスは設計図、オブジェクトはその設計図を基に作られた実際の車のようなものです。
先ほどの「車」のクラスを使って、実際のオブジェクトを作ってみましょう。
$myCar = new Car();
$myCar->color = "赤";
$myCar->model = "トヨタ";
$myCar->startEngine();
上記のコードでは、$myCar
というオブジェクトを作成し、色とモデルを設定しています。そして、startEngine()
メソッドを呼び出すと、エンジンが始動するメッセージが表示されます。
クラスは設計図、オブジェクトはその設計図をもとに作られた実際のものという関係です。
3. クラスのプロパティとメソッド(データと機能)
クラス内では、データ(プロパティ)と機能(メソッド)を定義することができます。プロパティはオブジェクトが持つデータを表し、メソッドはそのデータに対して行う操作を表します。
先ほどの車のクラスにおいて、プロパティは$color
や$model
でした。そして、startEngine()
はその車を動かすためのメソッドです。プロパティは、クラスがインスタンス化されてオブジェクトになると、それぞれのオブジェクトに値を持つことができます。
class Car {
public $color;
public $model;
public function startEngine() {
echo "エンジンがスタートしました!";
}
public function stopEngine() {
echo "エンジンが停止しました!";
}
}
この例では、新たにstopEngine()
メソッドを追加しました。車が動くだけでなく、停止もできるようになっています。
プロパティは車の色やモデルの情報を持ち、メソッドは車を動かす機能を提供します。こうした組み合わせが、クラスでオブジェクトを作成する際の基本となります。
4. オブジェクトの作成方法(インスタンス化)
オブジェクトは、クラスを「インスタンス化」することによって作成されます。インスタンス化とは、クラスを元に実際のオブジェクトを生成することです。
インスタンス化は、new
キーワードを使って行います。例えば、$myCar = new Car();
というコードが、クラスCar
のインスタンスを作成する方法です。
作成したオブジェクトには、そのクラスで定義したプロパティやメソッドを使用することができます。以下のコードで、クラスCar
から作ったオブジェクト$myCar
にプロパティとメソッドを設定します。
$myCar = new Car();
$myCar->color = "青";
$myCar->model = "ホンダ";
$myCar->startEngine();
$myCar->stopEngine();
このコードでは、$myCar
というオブジェクトを作り、色とモデルを設定し、その後、エンジンを始動させ、停止させています。
このように、オブジェクトはnew
を使ってインスタンス化した後、そのプロパティやメソッドにアクセスして操作を行います。
5. クラス内でのデータの扱い方(アクセス修飾子)
クラス内のプロパティやメソッドには、アクセス修飾子を使ってその公開範囲を制限することができます。アクセス修飾子には、主に以下の3つがあります。
- public: クラス外からもアクセス可能です。
- protected: クラス内やそのクラスを継承したクラスからアクセス可能です。
- private: クラス内からのみアクセス可能です。
例えば、クラスのプロパティ$color
をprivate
にすると、そのプロパティはクラスの外からは直接アクセスできなくなります。このようにすることで、データを守ることができます。
class Car {
private $color;
public $model;
public function setColor($color) {
$this->color = $color;
}
public function getColor() {
return $this->color;
}
}
このコードでは、$color
プロパティをprivate
にして、setColor()
メソッドとgetColor()
メソッドでアクセスしています。これにより、色を設定したり取得したりする際に、外部から直接プロパティにアクセスできないように保護しています。
アクセス修飾子を適切に使うことで、クラス内のデータの管理がより安全になります。
6. PHPのクラスとオブジェクトの使い方の例(簡単な実装例)
クラスとオブジェクトを使う具体的な例として、簡単な「銀行口座」クラスを作成してみましょう。このクラスでは、口座番号、名前、残高を管理し、預金や引き出しの操作を行います。
class BankAccount {
private $accountNumber;
private $accountHolder;
private $balance;
public function __construct($accountNumber, $accountHolder, $balance) {
$this->accountNumber = $accountNumber;
$this->accountHolder = $accountHolder;
$this->balance = $balance;
}
public function deposit($amount) {
if ($amount > 0) {
$this->balance += $amount;
echo "預金が成功しました。現在の残高は" . $this->balance . "円です。";
} else {
echo "預金額は正の数でなければなりません。";
}
}
public function withdraw($amount) {
if ($amount > 0 && $amount <= $this->balance) {
$this->balance -= $amount;
echo "引き出しが成功しました。現在の残高は" . $this->balance . "円です。";
} else {
echo "引き出し額が無効です。残高を確認してください。";
}
}
public function getBalance() {
return $this->balance;
}
}
このコードでは、BankAccount
というクラスを作成し、口座の預金(deposit()
)や引き出し(withdraw()
)を管理するメソッドを定義しています。
クラスをインスタンス化することで、実際に銀行口座を作成し、操作を行うことができます。次に、このクラスを使って実際に操作してみましょう。
$account = new BankAccount("123-456", "山田太郎", 10000);
$account->deposit(5000);
$account->withdraw(3000);
echo "最終的な残高: " . $account->getBalance() . "円";
上記のコードでは、BankAccount
クラスをインスタンス化し、預金と引き出しを行っています。残高を取得するために、getBalance()
メソッドを使っています。
このように、クラスとオブジェクトを使うことで、関連するデータや機能を一つにまとめて効率的に操作することができます。
7. クラスを使うメリット(再利用性、コードの整理など)
クラスを使うことで、コードをより整理し、再利用可能にすることができます。以下のようなメリットがあります。
- 再利用性: クラスは一度作成すれば、何度でもインスタンス化して使うことができ、同じコードを繰り返し書く必要がありません。
- 保守性: クラス内で変更があった場合、そのクラスだけを修正すれば済むため、コードの保守が容易です。
- 整理整頓: クラスはデータと機能を一つにまとめて整理することができ、コード全体の見通しが良くなります。
例えば、先ほどの銀行口座の例では、預金や引き出しの操作を管理するクラスを使うことで、複数の場所で同じ操作を繰り返す必要がなくなります。また、口座番号や残高などの情報もクラス内で整理され、他の場所で使う際にはインスタンス化して操作するだけで済みます。
このように、クラスを使うことでコードの整理が進み、保守性が向上するだけでなく、開発が効率的になります。
8. 初心者におすすめのPHPクラス学習方法
PHPでクラスを学ぶ際には、以下のステップを踏むことをおすすめします。
- 基本を理解する: まずは、クラスの定義方法、プロパティとメソッドの使い方、インスタンス化の仕方を理解しましょう。
- 簡単なクラスを作る: 初めてのクラスは、実生活に関連するもの(例えば、銀行口座や学生など)を作成して、クラスを使う実感を得ましょう。
- アクセス修飾子やコンストラクタを学ぶ: クラス内のデータのアクセス方法や、インスタンス化時に初期化を行うコンストラクタを学ぶことで、より高度なクラスを作成できるようになります。
- 継承を学ぶ: 他のクラスから機能を引き継ぐ「継承」の概念を学ぶことで、コードの再利用性がさらに向上します。
- 練習問題を解く: クラスを使った練習問題を解いて、実践的なスキルを磨きましょう。
PHPのクラスは、少し理解が難しく感じるかもしれませんが、基本をしっかりと学び、実際に手を動かしてコードを書いていくうちに、自然と理解できるようになります。
学習を進める中で、PHPのクラスの強力な機能を活用できるようになれば、より効率的で整理されたコードを書くことができ、開発が楽になります。