クラスモジュールのstaticプロパティとstaticメソッド
staticの識別子を付けたプロパティやメソッドは通常の?(動的な)プロパティやメソッドとは使い方が異なり、インスタンス化せずに呼び出しする。使い方は「クラス名::プロパティ または メソッド 」となる。
class ClsSttTest{
public static $iStt = 0; // STATIC プロパティ
static function funcStt(){ // STATIC メソッド
ClsSttTest::$iStt += 1;
return "This is Static Function" . ClsSttTest::$iStt;
}
public $iDyn = 0; // 動的プロパティ
public function funcDyn(){ // 動的メソッド
$this->iDyn += 1;
return "This is Dynamic Function" . $this->iDyn;
}
}
// 動的なプロパティやメソッドはインスタンス化してから呼び出し
$itStt1 = new ClsSttTest(); // インスタンス化
echo $itStt1->funcDyn(); // This is Dynamic Function1
echo "<br />";
// staticなプロパティやメソッドはインスタンス化せずに「クラス名::プロパティ or メソッド」で呼び出し
echo ClsSttTest::funcStt(); // This is Static Function1
echo "<br />";
// staticプロパティはクラスに属するので値を保持したままとなる
$itStt2 = new ClsSttTest(); // インスタンス化
echo $itStt2->funcDyn(); // This is Dynamic Function1
echo "<br />";
echo ClsSttTest::funcStt(); // This is Static Function2
echo "<br />";
staticなプロパティはインスタンスとは関係なくクラスごとに値を保持。なので、新しいインスタンスを生成しても元の値が保持されてる事を忘れないように。大丈夫だと思うけど^^;
ちなみに、小クラスのstaticプロパティは親クラスとは別のプロパティになるみたい。親子でも別クラスだからね~と納得。