【PHP】Lesson5−1:クラスの定義方法とオブジェクト指向の基本を学ぼう

PHPはオブジェクト指向プログラミング(OOP)に対応した言語です。
OOPではプログラムを「オブジェクト」という単位で構成し、それらを操作することで効率的にシステムを開発できます。
ここでは、その中心的な役割を果たす「クラス」について学びます。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数編
Lesson4:データ構造編
Lesson5:クラス編
・Lesson5-1:クラスを定義しよう ◁今回はココ
・Lesson5-2:コンストラクタを理解しよう
・Lesson5-3:アクセス修飾子とカプセル化を理解しよう
・Lesson5-4:クラスメンバを理解しよう
・Lesson5-5:クラスの継承を理解しよう
・Lesson5-6:メソッドのオーバーライドを理解しよう
・Lesson5-7:抽象クラスを理解しよう
・Lesson5-8:インターフェースを理解しよう
・Lesson5-9:トレイトを理解しよう
・確認問題5-1:モンスター捕獲ゲームを作ろう
・確認問題5-2:マインスイーパを作ろう
クラスとは?PHPオブジェクト指向の設計図を理解しよう

クラスとは、データと処理をまとめて扱うための「設計図」です。
たとえば、「犬」というクラスを定義すると、その犬が持つ「名前」や「年齢」などの情報(プロパティ)と、「吠える」や「走る」などの動作(メソッド)をひとまとめにできます。
これにより、データとそれに関連する処理を整理して管理できます。
PHPでクラスを定義する基本構文とサンプルコード
PHPでクラスを定義するには、たとえば次のようにコードを書きます。
class Dog { // Dogという名前のクラスを定義 public $name; // プロパティ(変数) public $age; // プロパティ(変数) // メソッド(関数)の定義 public function bark() { echo "ワンワン!" . PHP_EOL; } } // Dogクラスはここまで
class
キーワード: クラスを定義するために使用します。- プロパティ: クラス内で管理するデータを変数として宣言します。
- メソッド: クラスの中にある関数はメソッドと呼び、動作を定義します。
publicの役割について:
コード内に出てくる public
は「アクセス修飾子」と呼ばれるもので、プロパティやメソッドへのアクセス権限を決めるために使われます。
詳細は Lesson5-3 で説明しますが、ここでは「クラスの外からクラス内に自由にアクセスするために必要なもの」と理解してください。
PHPクラスのプロパティとメソッドの基本を理解しよう
PHPのプロパティ|オブジェクトが持つデータの役割
クラス内で宣言される変数をプロパティと呼びます。プロパティはオブジェクトごとに異なるデータを保持できます。
PHPのメソッド|クラス内で定義する関数の役割
クラス内で定義された関数をメソッドと呼びます。オブジェクトごとの振る舞いを定義できます。
以下はプロパティとメソッドの利用例です:
class Car { // Carという名前のクラスを定義 public $brand; // プロパティ public $color; // メソッド public function drive() { echo "走っています!" . PHP_EOL; } }
PHPクラスの使用例|オブジェクトを生成・操作してみよう
クラスはあくまでもデータと動作を書いた設計図にすぎず、クラスそのものは動作しません。
定義したクラスを使うには、インスタンスを生成する必要があります。
インスタンスとは、クラスという設計図から生成される具体的なオブジェクトのことです。
class Dog { // Dogクラスの定義 public $name; public $age; public function bark() { // bark()メソッドの定義 echo "ワンワン!" . PHP_EOL; } } // インスタンスの作成 $dog1 = new Dog(); // Dogクラスのオブジェクト作成し、変数$dog1に代入 $dog1->name = "ポチ"; // 変数$dog1の中のプロパティnameに文字列"ポチ"を代入 $dog1->age = 3; // 変数$dog1の中のプロパティageに数値 3 を代入 echo "名前: " . $dog1->name . PHP_EOL; // 変数$dog1のプロパティを出力 echo "年齢: " . $dog1->age . "歳" . PHP_EOL; $dog1->bark(); // 変数$dog1の中のbark()メソッドの呼び出し
このコードを実行すると以下のように出力されます。
名前: ポチ 年齢: 3歳 ワンワン!
- インスタンス化:
new クラス名()
でオブジェクトを作成します。 - プロパティの参照と設定:
->
演算子を使用します。 - メソッドの呼び出し: 同様に
->
演算子を使います。
インスタンスとは?クラスとの違いと使い方を解説
インスタンスはクラスを元に作成される具体的なオブジェクトです。
複数のインスタンスを作成することで、同じ設計図(クラス)から異なるデータを持つオブジェクトを扱うことができます。
$dog1 = new Dog(); $dog2 = new Dog(); $dog1->name = "ポチ"; $dog2->name = "タロウ"; echo $dog1->name . PHP_EOL; // ポチ echo $dog2->name . PHP_EOL; // タロウ
インスタンスは互いに独立したデータを保持します。
PHPのクラス定義と使い方のまとめ

この図はこれから学習するレッスン5「クラス編」の概要をまとめたものです。
この記事の内容は、図上部の子クラス1からメインプログラム内へのインスタンス生成している部分に該当します。
クラス = データや動作を書いた設計図。クラス自体は動作しない。
インスタンス = クラスから作られる、実際に動作するプログラム。
クラスはデータと処理をまとめて整理できる強力な仕組みです。
次の章ではクラスをより便利にする「コンストラクタ」について学び、オブジェクトの初期化を効率化する方法を理解しましょう。
演習問題|PHPでクラスを使って動物園の管理プログラムを作ろう

動物園の動物を管理するためのプログラムを作成しましょう。
このプログラムでは「動物クラス」を作成し、各動物の名前や種類を管理します。さらに、各動物が鳴き声を出す機能を実装します。
この練習を通して、クラスの定義と使用方法を学びます。
この演習の要件
以下の要件に従ってコードを完成させてください。
- クラスの定義
Animal
という名前のクラスを作成すること。
- プロパティの定義
- プロパティ
$name
に動物の名前を保持すること。 - プロパティ
$type
に動物の種類を保持すること。
- プロパティ
- メソッドの定義
showInfo
メソッドを作成し、動物の名前と種類を出力すること。makeSound
メソッドを作成し、引数で受け取った鳴き声を出力すること。
- インスタンスの作成と操作
Animal
クラスからインスタンスを2つ作成すること。- 1つ目のインスタンスには「ライオン」という名前と「肉食動物」という種類を設定すること。
- 2つ目のインスタンスには「ゾウ」という名前と「草食動物」という種類を設定すること。
- 動作の確認
- 各インスタンスに対して
showInfo
メソッドとmakeSound
メソッドを呼び出し、結果を表示すること。
- 各インスタンスに対して
ただし、以下のような実行結果となること。
名前: ライオン 種類: 肉食動物 ライオンは「ガオー」と鳴きます。 名前: ゾウ 種類: 草食動物 ゾウは「パオーン」と鳴きます。
解き方のヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:PHPスクリプトの開始宣言
2:Animalクラスの定義
□ プロパティ$nameをpublicとして宣言(動物の名前を保持)
□ プロパティ$typeをpublicとして宣言(動物の種類を保持)
□ showInfoメソッドの定義(動物の情報を表示する)
□ □ $nameプロパティの値を「名前: 」という文字列と共に出力
□ □ $typeプロパティの値を「種類: 」という文字列と共に出力
□ makeSoundメソッドの定義(鳴き声を出す)
□ □ 引数$soundを受け取り、「[名前]は「[鳴き声]」と鳴きます。」という形式で出力
3:Animalクラスのインスタンス($animal1)を作成
4:$animal1のプロパティnameに「ライオン」を代入
5:$animal1のプロパティtypeに「肉食動物」を代入
6:$animal1のshowInfoメソッドを呼び出し、情報を出力
7:$animal1のmakeSoundメソッドを呼び出し、「ガオー」という鳴き声を出力
8:空行を出力(区切り線として)
9:Animalクラスの別インスタンス($animal2)を作成
10:$animal2のプロパティnameに「ゾウ」を代入
11:$animal2のプロパティtypeに「草食動物」を代入
12:$animal2のshowInfoメソッドを呼び出し、情報を出力
13:$animal2のmakeSoundメソッドを呼び出し、「パオーン」という鳴き声を出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?php /* 【穴埋め問題1】ここでAnimalクラスを定義し、動物の名前と種類を保持するプロパティを作成してください。 */ /* 【穴埋め問題2】ここで動物の情報を表示するshowInfoメソッドを定義し、名前と種類を表示するコードを書いてください。 */ /* 【穴埋め問題3】ここで鳴き声を表示するmakeSoundメソッドを定義し、指定された鳴き声を出力するコードを書いてください。 */ // クラスの使用例 - インスタンス化と操作 $animal1 = new Animal(); // Animalクラスからインスタンスを作成 $animal1->name = "ライオン"; // 名前を設定 $animal1->type = "肉食動物"; // 種類を設定 $animal1->showInfo(); // 情報を表示 $animal1->makeSound("ガオー"); // 鳴き声を表示 echo PHP_EOL; // 区切り行 $animal2 = new Animal(); // 別のインスタンスを作成 $animal2->name = "ゾウ"; // 名前を設定 $animal2->type = "草食動物"; // 種類を設定 $animal2->showInfo(); // 情報を表示 $animal2->makeSound("パオーン"); // 鳴き声を表示
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
演習問題の答え合わせ
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
<?php // クラスの定義 - Animalクラスを定義 class Animal { // プロパティ - 動物の名前と種類を保持する public $name; // 動物の名前 public $type; // 動物の種類 // メソッド - 動物の情報を表示する public function showInfo() { echo "名前: " . $this->name . PHP_EOL; // 名前を表示 echo "種類: " . $this->type . PHP_EOL; // 種類を表示 } // メソッド - 鳴き声を出す public function makeSound($sound) { echo $this->name . "は「" . $sound . "」と鳴きます。" . PHP_EOL; } } // クラスの使用例 - インスタンス化と操作 $animal1 = new Animal(); // Animalクラスからインスタンスを作成 $animal1->name = "ライオン"; // 名前を設定 $animal1->type = "肉食動物"; // 種類を設定 $animal1->showInfo(); // 情報を表示 $animal1->makeSound("ガオー"); // 鳴き声を表示 echo PHP_EOL; // 区切り行 $animal2 = new Animal(); // 別のインスタンスを作成 $animal2->name = "ゾウ"; // 名前を設定 $animal2->type = "草食動物"; // 種類を設定 $animal2->showInfo(); // 情報を表示 $animal2->makeSound("パオーン"); // 鳴き声を表示
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
クラスの定義
class Animal {
class
キーワード: クラスを定義します。- クラス名: ここでは
Animal
という名前でクラスを作成しています。 - 役割: クラスは、データ(プロパティ)と機能(メソッド)をまとめて扱う「設計図」です。
プロパティの宣言
public $name; // 動物の名前 public $type; // 動物の種類
public
: このプロパティが「外部からアクセス可能」であることを示します。詳細はLesson5-3で学びます。$name
と$type
: 動物の名前と種類を保存する変数です。- プロパティの役割: クラス内で情報を保持するために使います。
メソッドの定義:情報を表示する機能
public function showInfo() { echo "名前: " . $this->name . PHP_EOL; echo "種類: " . $this->type . PHP_EOL; }
function
: メソッド(関数)を定義します。$this->name
:$this
は現在のインスタンスを指します。->
演算子: インスタンスのプロパティやメソッドにアクセスするために使います。echo
: 出力を行います。改行はPHP_EOL
を使います。
メソッドの定義:鳴き声を出す機能
public function makeSound($sound) { echo $this->name . "は「" . $sound . "」と鳴きます。" . PHP_EOL; }
- 引数
$sound
: 鳴き声を外部から受け取ります。 - 文字列の連結:
.
演算子で文字列をつなげます。 - 役割: インスタンスごとに異なる鳴き声を表示します。
インスタンスの作成と操作
$animal1 = new Animal(); $animal1->name = "ライオン"; $animal1->type = "肉食動物"; $animal1->showInfo(); $animal1->makeSound("ガオー");
new Animal()
: クラスからオブジェクトを作成します。このプロセスを インスタンス化 と呼びます。- プロパティの設定:
$animal1->name = "ライオン";
のように、プロパティに値を設定します。
- メソッドの呼び出し:
$animal1->showInfo();
のように、インスタンスのメソッドを呼び出します。
別のインスタンスの作成と操作
$animal2 = new Animal(); $animal2->name = "ゾウ"; $animal2->type = "草食動物"; $animal2->showInfo(); $animal2->makeSound("パオーン");
- 複数のインスタンス: 同じクラスから異なるオブジェクトを作成できます。
- 独立性:
$animal1
と$animal2
は互いに独立したデータを保持します。
まとめ
このコードではPHPの「クラスの定義と使用」を学びました。
- クラスの役割: データと処理をまとめて扱う設計図です。
- プロパティ: データを保持します。
- メソッド: 操作や動作を定義します。
- インスタンス: クラスから具体的なオブジェクトを作成し、それを操作します。
この解説を元にコードの理解を深め、実際に手を動かして試してみましょう!