В этом примере значение, возращенное функцией date, присваивается временной переменной $temp, которая затем вставляется в строку, возвращаемую определяемой функцией. Как только будет осуществлен выход из функции, значение переменной $temp удаляется, как будто она вообще никогда не использовалась. Теперь, для того чтобы посмотреть на области видимости переменных в действии, рассмотрим несколько похожий код, показанный в примере ниже. Здесь переменная $temp была создана eще до вызова функции longdate.
$temp = "Дата: ";
eho longdate ($timestamp)
{
return $temp . date("l F jS Y", $timestamp);
}
?>
Но поскольку переменная $temp не была создана внутри функции longdate, а также не была передана ей в качестве параметра, функция longdate не может получить к ней доступ. Поэтому этот фрагмент кода выведет только дату без предшествующего ей текста. На самом деле сначала будет отображено сообщение об ошибке, предупреждающее об использовании неопределенной переменной: «Notice: Undefined variable; temp».
Причина в том, что по умолчанию переменные, созданные внутри функции, являются локальными для этой функции, а переменйые, созданные за пределами любой функции, могут быть доступны только из того кода, который не входит в код ни одной из функций. В примерах ниже приведен ряд способов исправления кода, показанного в примере.
$temp = "Дата: ";
echo $temp . longdate(time());
function longdate ($timestamp)
{
return date ("l F jS Y" , $timestamp);
}
?>
В примере ниже ссылка на $temp перемещена за пределы функции.Эта ссылка появляется в той же области видимости, в которой была определена переменая.
Пример.
$temp = "Дата: ";
echo $temp . longdate(time());
function longdate ($timestamp)
{
return date ("l F jS Y" , $timestamp)
}
?>
В примере принято другое решение: передать значение переменной $temp функции longdate в качестве дополнительного аргумента. Функция longdate считывает это значение во временную переменную, которую она создает под именем $text, и выводит желаемый результат. Программисты часто допускают ошибку, забывая об области видимости переменных, поэтому, если не забывать о принципах ее работы, это поможет в отладке некоторых весьма неочевидных ошибок программного кода. Если вы не объявили переменную каким-нибудь особым образом, ее область видимости ограничена локальным пространством: либо в пределах кода текущей функции, либо в пределах кода, не принадлежащего никаким функциям, в зависимости от того, где эта переменная была впервые создана или где к ней впервые был получен доступ - внутри функции или за ее пределами.