static変数について
<staicとは?>
static修飾子を指定したフィールド(メンバ変数)やメソッドは、クラス固有でオブジェクト間で共有されるものであり、クラス変数、クラス・メソッドと呼びます。また、静的変数、静的メソッドとも呼ばれます。これらはインスタンス化しなくても利用できます。またインスタンス化しても、実体として用意されるメモリ領域は、そのクラスをインスタンス化して生成したすべてのオブジェクト間で共有されるのです。
staticは唯一、メモリ上に最初から固有で確保されている孤独な変数・メソッド!! staitcをインスタンス化しても、すべてのオブジェクト間で共有される。つまりいくらインスタンス化しても、staticな変数・メソッドは常に1つしか存在しない
<目的(メリット)>
1. 全てのクラスで使用できる定数or処理を用意できる。
2. staticは一つしか存在できないという特性を活かした処理を作ることができる。
<静的メンバが力を発揮するとき>
シングルトンと呼ばれる実装方法のとき!!!
シングルトン→アプリケーションの処理全体を通して、あるクラスのインスタンスじゃ絶対に1つしか存在しないことを保証する仕組み。
<?php class SingletonSample { private static $instance; private static getInstance() { if (self::$instance == null) { self::$instance = new self(); } return self::$instance; } $ins1 = SingletonSample::getInstance(); $ins2 = SingletonSample::getInstance(); if ($ins1 == $ins2) { echo '同じインスタンス'; } else { echo '違うインスタンス'; } ?>
2回目以降、getInstanceメソッドを再度呼び出しても、newは通らず、既に生成されて$instanceに格納されているインスタンスを返すだけの仕組み!