グローバル変数とローカル変数

変数のスコープ

ローカル変数

関数内で定義された変数。その関数の中でしかアクセスできない

グローバル変数

関数内で定義されていない変数。関数の中ではアクセスできない

<?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