オブジェクト指向言語ではインスタンスが持つ「インスタンス変数」のほか、同じクラスに属するインスタンス間で共有する「クラス変数」があります。
このインスタンス変数とクラス変数の違いと、使い分けの仕方について説明します。
クラス変数の書式・使い方
1 2 3 |
class クラス名 { static $クラス変数名; } |
static修飾子をつけることで、クラス変数となります。クラス変数はクラス名を指定するため、newでインスタンスを作成しなくても利用可能です。
クラス変数へのアクセス
グローバル変数のように複数のPHPファイルのどこからでも、クラス名さえ指定すれば使用可能です。
1 |
クラス名::$クラス変数名; |
インスタンス変数の書式・使い方
1 2 3 |
class クラス名 { $インスタンス変数名; } |
インスタンス変数は、インスタンスから呼び出されます。同じクラスであっても、インスタンスが異なれば別変数になります。
インスタンス変数へのアクセス
1 2 |
$インスタンス = new クラス名(); $インスタンス->インスタンス変数名; |
クラス変数とインスタンス変数の違い
つまり、同じクラスから作成された複数のインスタンスで、
- クラス変数:インスタンス間で共通の変数
- インスタンス変数:インスタンス毎に異なる変数
となります。
クラスに属するのがクラス変数、インスタンスに属するのがインスタンス変数と覚えれば良いでしょう。
サンプルコード
クラス変数のサンプルコード
1 2 3 4 5 6 7 8 9 10 |
class Sample { static public $var_class = 'クラス変数'; } // クラス変数 echo "結果1: " . Sample::$var_class . "\n"; // クラス変数の書き換え Sample::$var_class = '変数後のクラス変数'; echo "結果2: " . Sample::$var_class . "\n"; |
実行結果
1 2 |
結果1: クラス変数 結果2: 変数後のクラス変数 |
インスタンス変数のサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Sample { public $var_instance = 'インスタンス変数'; } // インスタンス変数 $instance1 = new Sample; $instance2 = new Sample; echo "結果1: " . $instance1->var_instance . "\n"; echo "結果2: " . $instance2->var_instance . "\n"; // インスタンス変数の書き換え $instance1->var_instance = '変更後のインスタンス変数'; echo "結果3: " . $instance1->var_instance . "\n"; echo "結果4: " . $instance2->var_instance . "\n"; |
実行結果
1 2 3 4 |
結果1: インスタンス変数 結果2: インスタンス変数 結果3: 変更後のインスタンス変数 結果4: インスタンス変数 |
まとめ
今回はクラス変数とインスタンス変数の使用例を紹介しました。
2つのうちインスタンス変数を使うことのほうが多いのですが、どちらを使うべきかを一概に述べることはできません。コードの設計に合わせて適切なものを使ってください。