staticプロパティ、staticメソッド

 通常のメンバは、インスタンスごとに個々の値を持ちます。Carクラスを基にインスタンスを3回生成すると、車のオブジェクトが3台分できます。それぞれ、スピードを記憶できたり、ガソリンを積んだりしていますが、3台とも別々で動いているわけです。

 しかし、クラスのメンバの中で「static」を指定すると、静的メンバとなります。つまり、複数のオブジェクトから1つのデータを共有して利用することができるようになります。また、staticメンバはインスタンスを生成しなくても利用することができます。

staticプロパティ定義の書式
アクセス権 static $変数名 =

staticメソッド定義の書式
アクセス権 static function メソッド名(引数リスト){
 処理
}

○ ファイル

 Carクラスを修正して確認してみましょう。

ファイルの種類 PHPファイル
ファイル名 Car.php

サンプルダウンロード

○ プログラム

 Carクラスにstaticメンバを追加しましょう。次のようにプログラムを変更してください。

Car.php

  1. class Car
  2. {
  3.  //プロパティ==========
  4.  //public $speed = 0; //スピード情報
  5.  private $speed = 0; //スピード情報(修正)
  6.  //public $gas = 0.0; //ガソリン情報
  7. private $gas = 0.0; //ガソリン情報(修正)
  8.  private static $maker = 'ダッシュ'; //メーカー名
  1.  //ガソリン残量を取得する
  2.  public function getGas(){
  3.   return $this -> gas;
  4.  }
  5.  //メーカーを紹介するメソッド
  6.  public static function introductionMaker(){
  7.   return 'この車は' . self::$maker . '製です。';
  8.  }
  9. }

○ クラス図

○ 解説

 11行目では、メーカー名を扱うプロパティを宣言しています。このプロパティはstaticキーワードがついているので、インスタンスを生成しなくても使えます。今回はprivateとなっているので、内部からしか使えませんが、このクラスのオブジェクトが複数生成されたとしてもひとつしか用意されません。60~62行目では、staticメソッドを定義しています。staticメソッド内でプロパティやメソッドを参照する場合は、staticなメンバを指定できます。インスタンスメンバ(インスタンスを生成しないと使用できないメンバ)は利用できません。selfキーワードはインスタンス化されていない自クラスを指します。

○ ファイル

 staticメンバを利用する記述をしましょう。「ConstructTest.php」ファイルをコピーして、「StaticTest.php」を作成してください。

ファイルの種類 PHPファイル
ファイル名 StaticTest.php

○ プログラム

 次のように修正してください。

StaticTest.php

  1. //減速してみる
  2. print('減速します!<br>');
  3. $car -> SpeedDown(5);
  4. showData($car);
  5. print('<hr>');
  6. //メーカー情報を表示する
  7. print(Car::introductionMaker());

○ 実行結果

実行結果
実行結果

○ 解説

 実行するとメーカー紹介が表示されるようになりました。59行目で、メーカー紹介のIntroductionMakerメソッドの呼び出しをしています。このメソッドはstaticメソッドなので、「クラス名::IntroductionMaker()」となっていることに注目してください。

インスタンスメンバとstaticメンバの例
インスタンスメンバとstaticメンバの例

前へ   次へ