Области видимости онлайн урок.


Когда мы определяем тело функции (в которое передаются аргументы функции) - мы, тем самым, определяем т.н. локальную область видимости. Соответственно все переменные, которые там находятся называются локальными. При передаче аргументов в тело функции, в памяти будут выделены отдельные области для хранения локальных переменных. Значения этих областей памяти будут доступны по названиям локальных переменных внутри тела функции, но не будут доступны вне тела функции. Потому они называются локальными - они "живут" только внутри тела функции.

Глобальные переменные - это переменные, которые были определены вне тела функции. Среди глобальных переменных могут быт переменные, которые имеют то же самое название, что и локальные, но это не будет приводить к ошибкам или конфликтам, т.к. они находятся в разных областях видимости.

Для иллюстрации этих особенностей, приведем примеры и изображения.

function test($x)
{
  $x++;
  $var = 4323;
  echo $x . '<br>';
  echo $var . <br>;
  echo $b . <br>;
}

$a = 256;
$b = 100;
test($a); // we got 257, 4323 and notice: $b is undefined
echo $a; // we got 256
echo $var; // notice: undefined variable


В данном примере мы создали глобальную переменную $a = 256. При передаче этой переменной в тело функции создается ее копия в локальной области видимости. Внутри функции все инструкции будут работать именно с этой копией, но ее значение будет удалено из памяти по окончанию работы функции. Об этом свидетельствуют выведенные данные на экран.

Вывод: при изменении переменной (которая передана из глобальной области видимости) внутри тела функции, ее значение не изменится в глобальной области видимости.

Также, в теле функции у нас определена переменная $var = 4323. Ее значение недоступно локальной области видимости - туту она не определена. Аналогично, мы не можем использовать переменные из глобальной области видимости внутри функций без специальных инструкций.

Замечание. Для использования глобальных переменных в локальной области видимости, необходимо их отдельно записать вместе с ключевым словом global


function test($x)
{
  global $b; // now we see $b!
  $x++;
  $var = 4323;
  echo $x . '<br>';
  echo $var . <br>;
  echo $b . <br>;
}

$a = 256;
$b = 100;
test($a); // we got 257, 4323 and 100
echo $a; // we got 256
echo $var; // notice: undefined variable


Замечание. Суперглобальные переменные, такие, как $_POST, $_GET, $_SERVER, $_FILES и т.п. всегда доступны в любых областях видимости. Отсюда и название суперглобальные.