【6日でできるPHP入門】クラスを使ったサンプル

 ここでは クラスを使ったサンプル を題材に、PHP でオブジェクト指向を実践する流れを段階的に体験します。クラスの定義・インスタンス生成・メンバ(プロパティ/メソッド)操作・ファイル分割まで、実行可能なサンプルと実行結果を交えて解説するので、手元の環境ですぐに動かしながら学習できます。

1.サンプルプログラムの概要

1.1. ファイルの構成

以下 2 ファイルで構成します。

ファイル名役割
printer.phpプリンタクラスの定義(モデル図)
sample_printer.phpクラスを読み込み、インスタンス操作

1.2. サンプル全体の流れ

  1. printer.php でクラスを定義
  2. sample_printer.phprequire_once によりクラスを読み込む
  3. インスタンスを生成し、プロパティを設定
  4. メソッドを呼び出して動きを確認

2.クラス定義 ― printer.php

ファイル名: printer.php

<?php
// プリンタクラス
class Printer {
    // --- プロパティ -----------------
    public string $model;          // 型番
    public int    $ppm;            // 印刷速度(Pages Per Minute)

    // --- コンストラクタ -------------
    public function __construct() {
        echo "プリンタオブジェクトを生成しました<br>";
    }

    // --- メソッド -------------------
    // 印刷開始
    public function startPrint(int $pages): void {
        echo "「{$this->model}」が {$pages} ページを "
           . "{$this->ppm} ページ/分 で印刷中<br>";
    }
    // 待機状態へ
    public function standby(): void {
        echo "「{$this->model}」が待機状態になりました<br>";
    }
}
?>
種別名前説明
プロパティ$modelプリンタの型番
プロパティ$ppm1 分あたりの印刷枚数
メソッド__construct()インスタンス生成時に実行
メソッドstartPrint()印刷を開始する。
メソッドstandby()待機状態へ遷移する。

「.」の意味

PHPにおける「.(ドット)」は、文字列の連結演算子(concatenation operator)です。

文字列や変数同士をつなげて一つの文字列にする働きがあります。

プログラムでの使い方
phpコピーする編集するecho "「{$this->model}」が {$pages} ページを "
   . "{$this->ppm} ページ/分 で印刷中<br>";

この例の場合

  • "「{$this->model}」が {$pages} ページを "
    これはダブルクォート内で変数展開された文字列です。
  • "{$this->ppm} ページ/分 で印刷中<br>"
    こちらも変数展開された別の文字列です。
  • この2つの文字列を「.」で連結して、1つの長い文字列にしています。

3.インスタンス生成と操作 ― sample_printer.php

ファイル名: sample_printer.php

<?php
// 3-1. クラスの読み込み
require_once 'printer.php';

// 3-2. インスタンス生成
$printer = new Printer();            // コンストラクタ発火

// 3-3. プロパティに値を代入
$printer->model = "EP-123";
$printer->ppm   = 20;

// 3-4. メソッド呼び出し
$printer->startPrint(10);            // 10ページ印刷
$printer->standby();                 // 待機
?>

3.1. 実行結果(Web ブラウザ表示例)

URLに「http://localhost/sample_printer.php」と入力します。

4.コード詳細解説

4.1. コンストラクタと $this

  • __construct() はインスタンス生成直後に 1 度だけ実行される特殊メソッド。
  • クラス内で自分自身を参照する疑似変数 $this を使い、$this->model$this->ppm へアクセスする。

4.2. アクセス修飾子

修飾子アクセス可能範囲
publicどこからでも利用可
protectedクラス自身+子クラスから可
private定義クラス内部のみ

本サンプルではすべて public のため、外部 ($printer->model) から直接操作できる。

4.3. require_once でのファイル読込

require_once 'printer.php'; により重複読み込みを防ぎつつクラス定義を取り込む。モジュールを分割することで、クラスを再利用しやすく保守性も向上する。

5.オブジェクト指向のメリット再確認

観点手続き型スクリプトクラス利用
コード再利用関数や変数を個別に転用クラスを丸ごと再利用(複数プロジェクトで)
保守性関連機能が散在し修正漏れが起きやすい状態と振る舞いを一体化し修正箇所が局所化
拡張性新機能追加時に既存コードを改変しがち継承・ポリモーフィズムで既存コードを温存

まとめ

ここでは Printer クラス を例に、

クラス定義→2) インスタンス生成→3) プロパティ設定→4) メソッド呼び出し

 という一連の流れを実機で動かしながら確認しました。ファイルを分けて require_once で読み込むことで、大規模開発でも見通しの良いプロジェクト構造を保てます。次のステップとしては、アクセス修飾子の使い分けや継承・インターフェースを取り入れ、より高度なオブジェクト指向設計へ進んでみましょう。