グローバル変数とローカル変数
変数のスコープ
ローカル変数
関数内で定義された変数。その関数の中でしかアクセスできない
グローバル変数
関数内で定義されていない変数。関数の中ではアクセスできない
<?php $x = 10; (1) function increment() { return ++$x;(2) } print increment(); // 1 print $x // 10
- (1)はグローバル変数のため、increment内ではアクセスされていない。したがって初期値の10になる。
- (2)はローカル変数で(1)とは別物のため明示的に初期化されておらず、暗黙的に初期値が0とみなされる。したがって1になる。
global命令 ~関数内でグローバル変数を使用する~
global命令によって関数ブロックの中でグローバル変数にアクセスできる。
<?php $x = 10; (3) function increment() { global $x; // global命令 return ++$x; } print increment(); // 11 print $x // 11
- global命令によって(3)が関数内でアクセスされている。したがってインクリメントされて11になる。
static命令 ~関数呼び出し後もローカル変数を維持する~
ローカル変数は関数が呼び出されるたびに初期化され、処理後に即座に破棄される。
<?php function increment() { $x = 0; return ++$x; } print increment(); // 1 print increment(); // 1 ?>
static命令によって関数呼び出し後もローカル変数の値を維持できる。
<?php function increment() { static $x = 0; // static命令 return ++$x; } print increment(); // 1 print increment(); // 2 print $x; // null