【6日でできるPHP入門】引数とプロパティ

 「引数(arguments)」はメソッドやコンストラクタに 外部から値を渡す入口、一方「プロパティ(properties)」は オブジェクトが内部に保持する状態 を表します。PHP ではコンストラクタや任意のメソッドに引数を定義し、受け取った値を $this->プロパティ に格納することで、インスタンスごとに異なる状態を簡潔に初期化・更新できます。ここでは、引数とプロパティの関係を 1 ファイル完結型のサンプル で体験しながら、アクセス修飾子 private によるカプセル化まで段階的に学びます。

1.引数とプロパティの基礎

1.1. コンストラクタ引数でプロパティを初期化

  • __construct(…) に引数を指定できる。
  • 渡された値を $this->プロパティ へ格納すると「生成直後から使える状態」を保証

1.2. メソッド引数でプロパティを更新

  • メソッド側で引数を受け取り、プロパティへ代入すればインスタンスの状態が動的に変化
  • 同じクラスでもインスタンスごとにまったく別の振る舞いをさせられる。

2.カプセル化とアクセス修飾子

2.1. private 修飾子

修飾子アクセス可能範囲典型的な用途
publicどこからでも外部 API
protectedクラス自身+子クラス拡張用
private定義クラス内部のみ内部状態の隠蔽

2.2. 外部アクセス禁止の効果

 private プロパティは 直接書き換え不可。メソッド経由でのみ変更することで、整合性の取れた値だけを保持できる。

3.サンプルプログラム ― Book クラス

ファイル名:sample_book.php
単独で実行できます(PHP 8.1 以上推奨)。

ファイル名: sample_book.php

<?php
// 1. 本クラス
class Book {
    // --- プロパティ ---
    private string $title;
    private int    $page = 0;

    // --- コンストラクタ ---
    public function __construct(string $title) {
        $this->title = $title;
        echo "《{$this->title}》のオブジェクトを作成しました<br>";
    }

    // --- メソッド ---
    // 何ページまで読んだかを更新
    public function read(int $page): void {
        $this->page = $page;
        echo "《{$this->title}》を{$this->page}ページまで読み進めました<br>";
    }

    // 読書終了
    public function close(): void {
        echo "《{$this->title}》を閉じました(最終ページ {$this->page})<br>";
    }
}

// 2. インスタンス生成(引数付き)
$novel   = new Book("吾輩は猫である");
$manual  = new Book("PHP公式リファレンス");

// 3. メソッド呼び出し(引数付き)
$novel ->read(120);
$novel ->close();

$manual->read(45);
$manual->close();
?>

3.1. 実行結果

3.2. 処理の流れポイント

ステップ説明主なコード
① コンストラクタ呼出new Book("タイトル") が走り、$title をプロパティへ格納__construct()
② 読書開始read(ページ数)$this->page を更新read()
③ 読書終了状態を保持したままメッセージ出力close()

4.プログラム詳細解説

4.1. 同名ローカル変数とプロパティの区別

  • コンストラクタ内で $this->title = $title; のように $this-> を付けることで プロパティ へ代入。引数 $title はローカル変数。

4.2. private により外部変更を防止

  • $novel->page = 50; のような直接代入は Fatal error
  • 一貫性確保のため、ページ数は必ず read() を経由

4.3. 型宣言のメリット

  • string $title, int $page異常値の早期検出
  • PHP 8.1 以降なら readonly でタイトルの不変性を保証するとさらに安全

5.実務での応用例

ドメインコンストラクタ引数主なプロパティ主なメソッド例
ECサイト商品商品ID在庫・価格購入・値引き
IoTデバイスデバイスID温度・湿度計測・警告
教務管理システム学生番号単位数・GPA登録・評価

まとめ

 引数は「外から値を受け取る窓口」、プロパティは「インスタンスが抱える内部データ」。コンストラクタやメソッドで引数を受け取り、$this->プロパティ へ格納・更新することで、生成直後から一貫した状態を持つオブジェクト を作れます。さらに private を組み合わせてカプセル化すると、外部からの不正な変更を防ぎ、安全で拡張性の高いクラス設計が実現できます。