静的変数とは、関数実行後も値を失わないローカル変数。通常のローカル変数は、関数を呼び出す度に、初期化するが、静的変数は、関数を最初に呼び出し時だけ、初期化する。
静的変数の定義
変数の前に、static
を付加する。
function sample() {
static $var = 0; // 静的変数を定義
}
static $var = 0; // 静的変数を定義
}
静的変数$var
に、「0」を代入。
サンプル
静的変数の使用例
<?php
function sample() {
$varA = 0; // 通常のローカル変数を定義
static $varB = 0; // 静的変数を定義
$varA++;
$varB++;
echo '$varA: ' . $varA . ' | ';
echo '$varB: ' . $varB . '<br />';
}
sample();
sample();
sample();
?>
function sample() {
$varA = 0; // 通常のローカル変数を定義
static $varB = 0; // 静的変数を定義
$varA++;
$varB++;
echo '$varA: ' . $varA . ' | ';
echo '$varB: ' . $varB . '<br />';
}
sample();
sample();
sample();
?>
↓↓↓出力結果↓↓↓
$varA: 1 | $varB: 1
$varA: 1 | $varB: 2
$varA: 1 | $varB: 3
$varA: 1 | $varB: 2
$varA: 1 | $varB: 3
通常のローカル変数$varA
は、関数を呼び出す度に初期化され、「0」を代入するので、常に「1」を出力する。これに対し、静的変数$varB
は、関数を最初に呼び出し時だけ初期化し、関数実行後の値を保持し続けることができるので、関数を呼び出す度に、「1、2、3」と値が増えていく。
再帰関数における静的変数の使用例
静的変数を使うことで、再帰関数の再帰呼び出し回数を制御できる。
<?php
function sample() {
$varA = 0; // 通常のローカル変数を定義
static $varB = 0; // 静的変数を定義
$varA++;
$varB++;
echo '$varA: ' . $varA . ' | ';
echo '$varB: ' . $varB . '<br />';
if ( $varB < 5 ) {
sample();
}
}
sample();
?>
function sample() {
$varA = 0; // 通常のローカル変数を定義
static $varB = 0; // 静的変数を定義
$varA++;
$varB++;
echo '$varA: ' . $varA . ' | ';
echo '$varB: ' . $varB . '<br />';
if ( $varB < 5 ) {
sample();
}
}
sample();
?>
↓↓↓出力結果↓↓↓
$varA: 1 | $varB: 1
$varA: 1 | $varB: 2
$varA: 1 | $varB: 3
$varA: 1 | $varB: 4
$varA: 1 | $varB: 5
$varA: 1 | $varB: 2
$varA: 1 | $varB: 3
$varA: 1 | $varB: 4
$varA: 1 | $varB: 5