通常のメンバは、インスタンスごとに個々の値を持ちます。Carクラスを基にインスタンスを3回生成すると、車のオブジェクトが3台分できます。それぞれ、スピードを記憶できたり、ガソリンを積んだりしていますが、3台とも別々で動いているわけです。
しかし、クラスのメンバの中で「static」を指定すると、静的メンバとなります。つまり、複数のオブジェクトから1つのデータを共有して利用することができるようになります。また、staticメンバはインスタンスを生成しなくても利用することができます。
staticプロパティ定義の書式 |
---|
アクセス権 static $変数名 = 値 |
staticメソッド定義の書式 |
---|
アクセス権 static function メソッド名(引数リスト){ 処理 } |
○ ファイル
Carクラスを修正して確認してみましょう。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | Car.php |
○ プログラム
Carクラスにstaticメンバを追加しましょう。次のようにプログラムを変更してください。
Car.php
○ クラス図
○ 解説
11行目では、メーカー名を扱うプロパティを宣言しています。このプロパティはstaticキーワードがついているので、インスタンスを生成しなくても使えます。今回はprivateとなっているので、内部からしか使えませんが、このクラスのオブジェクトが複数生成されたとしてもひとつしか用意されません。60~62行目では、staticメソッドを定義しています。staticメソッド内でプロパティやメソッドを参照する場合は、staticなメンバを指定できます。インスタンスメンバ(インスタンスを生成しないと使用できないメンバ)は利用できません。selfキーワードはインスタンス化されていない自クラスを指します。
○ ファイル
staticメンバを利用する記述をしましょう。「ConstructTest.php」ファイルをコピーして、「StaticTest.php」を作成してください。
ファイルの種類 | PHPファイル |
---|---|
ファイル名 | StaticTest.php |
○ プログラム
次のように修正してください。
StaticTest.php
○ 実行結果
○ 解説
実行するとメーカー紹介が表示されるようになりました。59行目で、メーカー紹介のIntroductionMakerメソッドの呼び出しをしています。このメソッドはstaticメソッドなので、「クラス名::IntroductionMaker()」となっていることに注目してください。