
【6日でできるPHP入門】静的メンバ
静的メンバ(static member)は 「クラスそのものに紐づくプロパティ/メソッド」 です。インスタンスを生成せずに利用でき、プログラム全体で 1 つだけ値を保持したいときや、ユーティリティ関数をまとめたいときに重宝します。PHP では static 修飾子とスコープ解決演算子 :: を組み合わせることで、簡潔に実装・呼び出しが可能です。

1.静的メンバの基礎
1.1. インスタンスメンバとの違い
| 比較項目 | インスタンスメンバ | 静的メンバ |
|---|
| 所属 | インスタンスごと | クラスに 1 つ |
| 呼び出し | $obj->prop / $obj->method() | ClassName::$prop / ClassName::method() |
| 代表用途 | 個別状態の保持 | 共有状態・ユーティリティ |
1.2. 使用メリット
- 共有データの一元管理:生成数・総売上などをクラス単位で集計
- グローバル変数の安全版:名前空間汚染を防ぎつつどこからでもアクセス
- インスタンス不要の処理:文字列操作や設定取得など軽量呼び出し
1.3. 注意点
- 状態を持ちすぎると テストが難しく なる。
- マルチスレッド環境では 競合 に留意
2.PHP での実装ポイント
2.1. 宣言と初期化
private static int $counter = 0; // ← 宣言時に初期値
2.2. クラス外からの呼び出し
Device::getTotal(); // 静的メソッド
echo Device::$counter; // 静的プロパティ
2.3. クラス内での参照
| 書き方 | 意味 |
|---|
self::$prop | 同じクラス内の静的プロパティ |
3.サンプルプログラム ― Device クラス
ファイル名: sample_static.php
<?php
class Device {
// --- プロパティ ---
private int $serial; // 個別シリアル
private static int $total = 0; // 全体台数(静的)
// --- コンストラクタ ---
public function __construct() {
self::$total++; // 全体カウントを増やす
$this->serial = self::$total; // シリアル番号を付与
}
// --- インスタンスメソッド ---
public function showSerial(): void {
echo " シリアル番号: {$this->serial}<br>";
}
// --- 静的メソッド ---
public static function showTotal(): void {
echo "登録デバイス数: " . self::$total . "<br>";
}
}
// ------ 動作確認 ------
Device::showTotal(); // 0
$d1 = new Device();
$d1->showSerial(); // 1
Device::showTotal(); // 1
$d2 = new Device();
$d3 = new Device();
$d2->showSerial(); // 2
$d3->showSerial(); // 3
Device::showTotal(); // 3
?>
3.1. 実行結果

3.2. コード解説
| 行 | 役割 | 詳細 |
|---|
| 4 | static $total | クラス全体で共有する台数カウンタ |
| 8–10 | コンストラクタ | 生成ごとに $total を 1 増加し、その値をシリアルへコピー |
| 15 | showSerial() | インスタンスメンバなので $this->serial を参照 |
| 20 | showTotal() | 静的メソッド。self::$total で共有値を表示 |
| 29 | Device::showTotal() | インスタンスなしで呼び出し可能 |
4.静的メンバの主な用途と注意点
4.1. 静的メンバが便利な場面
| 利用シーン | 具体例 |
|---|
| 全体で共通の設定値 | アプリ全体のバージョン情報など |
| 集計やカウンタ | 生産数、アクセス数、利用人数など |
| インスタンスを生成しない操作 | ユーティリティ関数、設定変更など |
4.2. 静的メンバ利用時の注意点
- インスタンスごとに異なる値を保持したい場合は使わない。 静的メンバは全インスタンスで共有されるため、インスタンスごとの固有情報には向きません。
- 多用しすぎると保守性が下がる。 静的メンバに依存しすぎると、クラスの柔軟性が失われやすくなるため、用途を限定することが重要です。
まとめ
静的メンバは、「インスタンスを作らずに使える」「クラス全体でただ1つだけ存在する」便利な機能です。主に全体で共通の値やカウンタ管理など、インスタンス単位で管理する必要がないデータに向いています。
PHPではstatic修飾子で定義し、クラス名::やself::でアクセスします。
使い方と特徴を正しく理解し、適切な場面で活用できるようになりましょう。