
【6日でできるPHP入門】複数のインスタンス
1 つのクラスから 複数のインスタンス を生成すると、それぞれが独立した状態(プロパティ)を持ちながら同じ振る舞い(メソッド)を共有できます。これにより「同じ機能を持つけれどデータが異なるオブジェクト」を大量に扱えるため、在庫管理・掲示板の投稿・センサー群の監視など実用場面は多彩です。
ここでは、PHP でクラスを 2 ファイルに分割し、2 体のロボットを動かすサンプルを通して「インスタンス間の独立性」「メンバへのアクセス方法」を具体的に解説します。

1.インスタンスの基礎概念
1.1. インスタンスとは
- 定義: クラス(設計図)を
newで具現化した実体。 - 特徴: 各インスタンスはメモリ上に個別の領域を持ち、プロパティ値を互いに干渉せず保持する。
1.2. インスタンス生成の流れ
| 手順 | コード例 | 目的 |
|---|---|---|
| ① 設計図の読込 | require_once 'robot.php'; | クラス定義を取り込む |
| ② 生成 | $r1 = new Robot(); | コンストラクタ発火、初期化 |
| ③ 操作 | $r1->work(); | メソッド呼び出し |
2.複数インスタンスの生成と独立性
2.1. 2 体のロボットを作る
$r1 = new Robot();
$r2 = new Robot();$r1と$r2は別々のアドレス を指し、それぞれに$id,$taskを設定できる。
2.2. 独立したプロパティ
| プロパティ | $r1 の値 | $r2 の値 | 説明 |
|---|---|---|---|
$id | R-001 | R-002 | 相互に影響しない |
$task | 溶接 | 塗装 | インスタンスごとに変更可 |
3.サンプルコード
3.1. クラス定義 ― robot.php
ファイル名: robot.php
<?php
class Robot {
public string $id;
public string $task;
public function __construct() {
echo "ロボットが組み立てられました<br>";
}
public function work(): void {
echo "ロボット「{$this->id}」が{$this->task}を実行中<br>";
}
public function rest(): void {
echo "ロボット「{$this->id}」が休止状態です<br>";
$this->task = '';
}
}
?>3.2. 利用側 ― sample_multi_robot.php
ファイル名: sample_multi_robot.php
<?php
require_once 'robot.php'; // 3-1. クラス読込
$r1 = new Robot(); // 3-2. インスタンス生成①
$r2 = new Robot(); // 3-2. インスタンス生成②
$r1->id = 'R-001'; // 3-3. 個別設定
$r1->task = '溶接';
$r1->work();
$r1->rest();
$r2->id = 'R-002';
$r2->task = '塗装';
$r2->work();
$r2->rest();
?>3.3. 実行結果

4.コード詳細解説
4.1. require_once
- 同じファイルを重複読み込みしない安全策。クラス定義は 1 回だけ取り込めば十分。
4.2. コンストラクタ __construct()
- インスタンス生成と同時に実行。ここでは「ロボットが組み立てられました」を表示して初期化確認。
4.3. 疑似変数 $this
- クラス内部から自分自身のプロパティ/メソッドへアクセスするときに使用。
4.4. アクセス修飾子 public
| 修飾子 | アクセス範囲 | 本サンプルでの使い所 |
|---|---|---|
| public | どこからでも | $id, $task, 各メソッド |
5.複数インスタンス活用の実務例
| 業務ドメイン | クラス設計例 | インスタンス数 | 代表プロパティ | 代表メソッド |
|---|---|---|---|---|
| 物流管理 | Package | 1 日数千件 | 追跡番号 | 発送・配達 |
| IoT センサー | Thermometer | 現場ごとに多数 | 温度・設置場所 | 測定・警報 |
| SNS 投稿 | Post | 毎秒生成 | 本文・投稿者ID | いいね・共有 |
まとめ
同一クラスから複数のインスタンスを生成すると、「同じ機能を持つ独立したオブジェクト」 を自在に扱えます。各インスタンスはメモリ上で完全に分離されているため、プロパティ変更やメソッド実行が互いに干渉しません。これにより、大量データをオブジェクト単位で整理でき、手続き型よりも圧倒的に見通しの良いコードを構築できます。次のステップとしては、配列やコレクションでインスタンス群を一括管理し、ループ処理やデータベース連携へ発展させると、より実践的なアプリケーションが作れるでしょう。
