Материал предоставлен https://it.rfei.ru

Локальные переменные

Локальные переменные создаются внутри функции, и к ним имеется доступ только из кода этой функции. Обычно это временные переменные, которые используются до выхода из функции для хранения частично обработанных результатов.

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

Для того чтобы привести еще один пример локальной переменной, рассмотрим функцию longdate еще раз в слегка измененном варианте, показанном в примере.

Пример. Расширенная версия функции longdate

<?php
function longdate($timestamp)
{
     $temp = date("l F jS Y". $timestamp);
     return "Дата: $temp";
}
?>

В этом примере значение, возращенное функцией date, присваивается временной переменной $temp, которая затем вставляется в строку, возвращаемую определяемой функцией. Как только будет осуществлен выход из функции, значение переменной $temp удаляется, как будто она вообще никогда не использовалась.

Теперь, для того чтобы посмотреть на области видимости переменных в действии, рассмотрим несколько похожий код, показанный в следующем примере. Здесь переменная $temp была создана еще до вызова функции longdate.

Пример. Неудачная попытка получить доступ к переменной $temp в функции longdate

<?php
$temp = "Дата: ";
echo longdate(time());
function longdate($timestamp)
{
     return $temp . date("l F jS Y", $timestamp);
}
?>

Но поскольку переменная $temp не была создана внутри функции longdate, а также не была передана ей в качестве параметра, функция longdate не может получить к ней доступ. Поэтому этот фрагмент кода выведет только дату без предшествующего ей текста. На самом деле сначала будет отображено сообщение об ошибке, предупреждающее об использовании неопределенной переменной: «Notice: Undefined variable: temp».

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

В размещенных ниже двух примерах приведен ряд способов исправления кода, показанного в примере «Неудачная попытка получить доступ к переменной $temp в функции longdate».

Пример. Решить проблему можно путем переноса ссылки на переменную $temp в ее локальную область видимости

<?рhр
$temp = "Дата: ";
echo $temp . longdate(time());
function longdate($timestamp)
{
     return date("l F jS Y". $timestamp);
}
?>

В этом примере ссылка на $temp перемещена за пределы функции. Эта ссылка появляется в той же области видимости, в которой была определена переменная.

Пример. Альтернативное решение: передача $temp в качестве аргумента

<?php
$temp = "Дата: ";
echo longdate($temp, time());
function longdate($text, $timestamp)
{
     return $text . date("l F jS Y". $timestamp);
}
?>

В этом примере принято другое решение: передать значение переменной $temp функции longdate в качестве дополнительного аргумента. Функция longdate считывает это значение во временную переменную, которую она создает под именем $text, и выводит желаемый результат.

Программисты часто допускают ошибку, забывая об области видимости переменных, поэтому, если не забывать о принципах ее работы, это поможет в отладке некоторых весьма неочевидных ошибок программного кода. Если вы не объявили переменную каким-нибудь особым образом, ее область видимости ограничена локальным пространством: либо в пределах кода текущей функции, либо в пределах кода, не принадлежащего никаким функциям, в зависимости от того, где эта переменная была впервые создана или где к ней впервые был получен доступ — внутри функции или за ее пределами.

Область видимости переменнойГлобальные переменные