作成日:2006/05/10
1E.8.5 staticキーワード
PHPではC言語に似た静的(static)変数を作る事ができます。 staticキーワードは関数内のローカル変数でのみ使用できます。 PHPにはファイルレベルのスコープが存在しないので、C言語のようなファイルスコープを持つ静的変数は作れません。 また、グローバル変数は本来静的なので、プログラムの冒頭で初期化すれば十分です。
用例:
echo Counter(); // 1を出力
echo Counter(); // 2を出力
echo Counter(); // 3を出力
function Counter() {
static $a = 0;
return ++$a;
}
static変数を使用する上でのいくつかの注意点があります。 変数の初期値と許されているのはリテラル定数だけです。上の用例では、
の部分です。以下は記述はエラーになります。static $a=0;
static $a=1+2; // NG static $a=sqrt(1); // NG
また、リファレンスを保存する事ができません:
class boo_class{};
$boo = boo(true);
print_r($boo); // 'boo_class Object()'を出力します($booはオブジェクトです)
$boo = boo(false);
print_r($boo); // なにも出力しません($booはオブジェクトではありません)
function &boo($sw){
static $obj;
if ($sw) $obj =& new boo_class;
return $obj;
}
※なぜ、リファレンスを保存する事ができないのでしょうか?この理由については不明です。PHPの実装について詳しい方の助言を求めます。
