オブジェクト指向を使う上で、欠かせないのが変数の扱いです。
しかし、変数には「クラス変数」と「インスタンス変数」の2種類があるのはご存知ですか?
今回はオブジェクト指向初心者に向けて、
- ・クラス変数って何?
- ・クラス変数を使うと何ができるの?
をご紹介します。
オブジェクト指向初心者がつまづきやすいポイントを分かりやすく解説します。
クラス変数っていまいちよく分からない方は、ぜひ最後まで読んで理解を深めてくださいね。
クラス変数とは
クラス変数を説明する前に、クラスについておさらいしましょう。
オブジェクト指向におけるクラスとは、プロパティとメソッドを持っています。
1 2 3 4 5 6 7 |
class Car{ public $color; public function start(){ echo '発進します'; } } |
プロパティは変数と定数で定義できます。今回はこの「変数」について理解を深めましょう。
通常はクラスからインスタンスを作成し、プロパティを与えてあげます。
例として、2台の車を作ってみましょう。
1 2 3 4 5 |
$car1 = new Car(); $car2 = new Car(); $car1 -> color = 'red'; $car2 -> color = 'blue'; |
これで、$car1に「赤色」、$car2に「青色」というプロパティが設定されました。
この$colorは「インスタンス変数」と呼ばれ、インスタンス毎に持っている変数となります。
それに対して、クラス自身に変数を持たせたい事もあります。
例えば、メッセージとして「販売中」と設定してみます。
1 2 3 4 5 |
class Car{ public static $msg = '販売中'; } echo Car::$msg; // 販売中 |
この$msgは「クラス変数」と呼ばれ、クラス自身が持っている変数となります。
この変数は、インスタンスの間で共通の物になります。
- ・クラス変数:クラス自身が持っている変数
- ・インスタンス変数:インスタンス毎に持っている変数
クラス変数の定義
クラス変数とは何か分かったところで、使い方をみていきましょう。
クラス変数を定義するには、staticキーワードを使います。
書き方は、public static $変数名; です。
1 2 3 |
class Car{ public static $msg = '販売中'; } |
クラス変数として定義する事で、
- ・インスタンスを作らなくてもクラス変数にアクセスすることができる。
- ・インスタンスから -> を用いてアクセスすることができない。
- ・値はグローバル変数と同じように保存される。
これらの特徴が与えられます。
クラス変数にアクセスする
クラス変数にアクセスするには、クラス名::$変数名でアクセスします。
自身のクラス内でアクセスする場合は、self::$変数名でアクセスします。
1 2 3 4 5 6 7 |
class Car{ public static $msg = '販売中'; } echo Car::$msg; // 販売中 Car::$msg = '売り切れました'; // クラス変数の書き換え echo Car::$msg; // 売り切れました |
クラス変数は後から書き換える事も可能です。
また、インスタンスからアクセス事もできます。
その場合は、インスタンス名::$変数名でアクセスします。
1 2 3 4 5 6 |
class Car{ public static $msg = '販売中'; } $car1 = new Car(); echo $car1::$msg; // 販売中 |
クラス変数を使うメリット
クラス変数の使い方がわかったところで、クラス変数の使い道について考えてみましょう。
クラス変数の特徴として、
- ・各インスタンスに共通の変数である。
- ・クラス変数の値が常に保存される。
があります。
つまり、
- ・インスタンスが共通で持つプロパティを定義する。
- ・カウントアップなど、インスタンスを超えて保持したい変数がある。
などの時に使うと便利です。
まとめ
今回はクラス変数について、
- ・クラス変数とは何か?
- ・インスタンス変数とクラス変数の違い
- ・クラス変数の使い方
を解説しました。
クラス変数はインスタンス変数に比べ使うとこは少ないですが、うまく使えると便利なものですので、理解できるようにしておきましょう。