この記事で学べる知識:クラスの定義と使用
この記事の練習問題を解くために必要な知識:
基礎文法・制御構造・関数・データ構造(レッスン1~4)、クラスの定義と使用、コンストラクタ、アクセス修飾子とカプセル化、クラスメンバ、クラスの継承、メソッドのオーバーライド、抽象クラス、インターフェース、トレイト
PHPはオブジェクト指向プログラミング(OOP)に対応した言語です。
OOPではプログラムを「オブジェクト」という単位で構成し、それらを操作することで効率的にシステムを開発できます。
ここでは、その中心的な役割を果たす「クラス」について学びます。
<<前のページ | PHP記事一覧 |
次のページ>> |
クラスとは?:基本概念の説明
クラスとは、データと処理をまとめて扱うための「設計図」です。
たとえば、「犬」というクラスを定義すると、その犬が持つ「名前」や「年齢」などの情報(プロパティ)と、「吠える」や「走る」などの動作(メソッド)をひとまとめにできます。
これにより、データとそれに関連する処理を整理して管理できます。
クラスの定義:基本構文と記述例
PHPでクラスを定義するには、たとえば次のようにコードを書きます。
class Dog { // Dogという名前のクラスを定義 public $name; // プロパティ(変数) public $age; // プロパティ(変数) // メソッド(関数)の定義 public function bark() { echo "ワンワン!" . PHP_EOL; } } // Dogクラスはここまで
class
キーワード: クラスを定義するために使用します。- プロパティ: クラス内で管理するデータを変数として宣言します。
- メソッド: クラスの中にある関数はメソッドと呼び、動作を定義します。
publicの役割について:
コード内に出てくる public
は「アクセス修飾子」と呼ばれるもので、プロパティやメソッドへのアクセス権限を決めるために使われます。
詳細は Lesson5-3 で説明しますが、ここでは「クラスの外からクラス内に自由にアクセスするために必要なもの」と理解してください。
プロパティとメソッド:クラスの主要構成要素
プロパティとは?
クラス内で宣言される変数をプロパティと呼びます。プロパティはオブジェクトごとに異なるデータを保持できます。
メソッドとは?
クラス内で定義された関数をメソッドと呼びます。オブジェクトごとの振る舞いを定義できます。
以下はプロパティとメソッドの利用例です:
class Car { // Carという名前のクラスを定義 public $brand; // プロパティ public $color; // メソッド public function drive() { echo "走っています!" . PHP_EOL; } }
クラスの使用例:オブジェクトの作成と操作
クラスはあくまでもデータと動作を書いた設計図にすぎず、クラスそのものは動作しません。
定義したクラスを使うには、インスタンスを生成する必要があります。
インスタンスとは、クラスという設計図から生成される具体的なオブジェクトのことです。
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; // タロウ
インスタンスは互いに独立したデータを保持します。
まとめ
この図はこれから学習するレッスン5「クラス編」の概要をまとめたものです。
この記事の内容は、図上部の子クラス1からメインプログラム内へのインスタンス生成している部分に該当します。
クラス = データや動作を書いた設計図。クラス自体は動作しない。
インスタンス = クラスから作られる、実際に動作するプログラム。
クラスはデータと処理をまとめて整理できる強力な仕組みです。
次の章ではクラスをより便利にする「コンストラクタ」について学び、オブジェクトの初期化を効率化する方法を理解しましょう。
クラスの定義の練習問題:動物園の動物を管理するプログラムを作成しよう!
動物園の動物を管理するためのプログラムを作成しましょう。
このプログラムでは「動物クラス」を作成し、各動物の名前や種類を管理します。さらに、各動物が鳴き声を出す機能を実装します。
この練習を通して、クラスの定義と使用方法を学びます。
この問題の要件
以下の要件に従ってコードを完成させてください。
- クラスの定義
Animal
という名前のクラスを作成すること。
- プロパティの定義
- プロパティ
$name
に動物の名前を保持すること。 - プロパティ
$type
に動物の種類を保持すること。
- プロパティ
- メソッドの定義
showInfo
メソッドを作成し、動物の名前と種類を出力すること。makeSound
メソッドを作成し、引数で受け取った鳴き声を出力すること。
- インスタンスの作成と操作
Animal
クラスからインスタンスを2つ作成すること。- 1つ目のインスタンスには「ライオン」という名前と「肉食動物」という種類を設定すること。
- 2つ目のインスタンスには「ゾウ」という名前と「草食動物」という種類を設定すること。
- 動作の確認
- 各インスタンスに対して
showInfo
メソッドとmakeSound
メソッドを呼び出し、結果を表示すること。
- 各インスタンスに対して
ただし、以下のような実行結果となるコードを書くこと。
*****↓↓正解コードの実行結果の例↓↓*****
名前: ライオン 種類: 肉食動物 ライオンは「ガオー」と鳴きます。 名前: ゾウ 種類: 草食動物 ゾウは「パオーン」と鳴きます。
この問題を解くヒント
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メソッドを呼び出し、「パオーン」という鳴き声を出力
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
<?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の「クラスの定義と使用」を学びました。
- クラスの役割: データと処理をまとめて扱う設計図です。
- プロパティ: データを保持します。
- メソッド: 操作や動作を定義します。
- インスタンス: クラスから具体的なオブジェクトを作成し、それを操作します。
この解説を元にコードの理解を深め、実際に手を動かして試してみましょう!
<<前のページ |
PHP記事一覧 |
次のページ>> |
この記事への質問・コメント
この記事を作成するにあたりAIを活用しています。
問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。