
【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 を組み合わせてカプセル化すると、外部からの不正な変更を防ぎ、安全で拡張性の高いクラス設計が実現できます。
