【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 の値説明
$idR-001R-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.複数インスタンス活用の実務例

業務ドメインクラス設計例インスタンス数代表プロパティ代表メソッド
物流管理Package1 日数千件追跡番号発送・配達
IoT センサーThermometer現場ごとに多数温度・設置場所測定・警報
SNS 投稿Post毎秒生成本文・投稿者IDいいね・共有

まとめ

 同一クラスから複数のインスタンスを生成すると、「同じ機能を持つ独立したオブジェクト」 を自在に扱えます。各インスタンスはメモリ上で完全に分離されているため、プロパティ変更やメソッド実行が互いに干渉しません。これにより、大量データをオブジェクト単位で整理でき、手続き型よりも圧倒的に見通しの良いコードを構築できます。次のステップとしては、配列やコレクションでインスタンス群を一括管理し、ループ処理やデータベース連携へ発展させると、より実践的なアプリケーションが作れるでしょう。