Артур-1
Мастер
[HR][/HR]
Переменная, объявленная внутри пользовательской функции, считается локальной; другими словами, на нее можно ссылаться только в этой функции. При любом присваивании вне функции будет использоваться совершенно другая переменная, которая не имеет ничего общего (кроме имени) с переменной, объявленной внутри функции. При выходе из пользовательской функции, в которой была объявлена локальная переменная, эта переменная и ее значение уничтожаются.
Основное достоинство локальных переменных — отсутствие непредвиденных побочных эффектов, связанных со случайной или намеренной модификацией глобальной переменной. Рассмотрим следующий пример:
Этот скрипт не сгенерирует никакого вывода, поскольку выражение echo указывает на локальную переменную $a, а в пределах локальной области видимости ей не не было присвоено значение.
Подход к области видимости в PHP отличается от языка C в том, что глобальные переменные в C автоматически доступны функциям, если только они не были перезаписаны локальным определением. В PHP, если глобальная переменная будет использоваться внутри функции, она должна быть объявлена глобальной внутри нее:
В результате работы скрипта функция test() возвратит "1", поскольку мы объявили переменную $a глобальной, то есть, сделали переменную $a доступной для всей программы (скрипта).
[HR][/HR]
Глобальные переменные - это переменные, которые доступны всей программе, включая подпрограммы (пользовательские функции).
Для PHP все объявленные и используемые в функции переменные по умолчанию локальны для функции. То есть, по умолчанию нет возможности изменить значение глобальной переменной в теле функции.
Если вы в теле пользовательской функции будете использовать переменную с именем, идентичным имени глобальной переменной (находящейся вне пользовательской функции), то никакого к отношения глобальной переменной эта локальный переменная иметь не будет. В данной ситуации в пользовательской функции будет создана локальная переменная с именем, идентичным имени глобальной переменной, но доступна данная локальная переменная будет только внутри этой пользовательской функции.
Поясним данный факт на конкретном примере:
Сценарий выведет сперва 70, а затем 100:
Для избавления от приведенного недостатка, в PHP существует специальная инструкция global, позволяющая пользовательской функции работать с глобальными переменными. Рассмотрим данный принцип на конкретных примерах:
Вышеприведенный скрипт выведет "3". После определения $a и $b внутри функции как global все ссылки на любую из этих переменных будут указывать на их глобальную версию. Не существует никаких ограничений на количество глобальных переменных, которые могут обрабатываться пользовательскими функциями.
Второй способ доступа к переменным глобальной области видимости - использование специального, определяемого PHP массива $GLOBALS. Предыдущий пример может быть переписан так:
Использование $GLOBALS вместо global:
[HR][/HR]
Помимо локальных и глобальных переменных, в PHP существует еще один тип переменных - статические переменные.
Если в теле пользовательской функции объявлена статическая переменная, то компилятор не будет ее удалять после завершения работы этой функции.
Объявление статических переменных:
Пример работы пользовательской функции, содержащей статические переменные:
<?php
function funct()
{
static $a;
$a++;
echo "$a";
}
for ($i = 0; $i++<10
funct();
?>
Данный сценарий выводит строку:
Если мы удалим инструкцию static, будет выведена строка:
Это связано с тем, что переменная $a будет удаляться при завершении работы функции и обнуляться при каждом ее вызове. Переменная $a инкрементируется сразу после обнуления, а только потом выводится.
[HR][/HR]
Локальные переменные
[HR][/HR]Переменная, объявленная внутри пользовательской функции, считается локальной; другими словами, на нее можно ссылаться только в этой функции. При любом присваивании вне функции будет использоваться совершенно другая переменная, которая не имеет ничего общего (кроме имени) с переменной, объявленной внутри функции. При выходе из пользовательской функции, в которой была объявлена локальная переменная, эта переменная и ее значение уничтожаются.
Основное достоинство локальных переменных — отсутствие непредвиденных побочных эффектов, связанных со случайной или намеренной модификацией глобальной переменной. Рассмотрим следующий пример:
Код:
<?php
$a = 1; /* глобальная область видимости */
function Test()
{
echo $a; /* ссылка на переменную локальной области видимости */
}
Test();
?>
Подход к области видимости в PHP отличается от языка C в том, что глобальные переменные в C автоматически доступны функциям, если только они не были перезаписаны локальным определением. В PHP, если глобальная переменная будет использоваться внутри функции, она должна быть объявлена глобальной внутри нее:
Код:
<?php
$a = 1; /* глобальная область видимости */
function Test()
{
global $a; /* Объявляем переменную $a глобальной */
echo $a; /* ссылка на переменную локальной области видимости */
}
Test();
?>
[HR][/HR]
Глобальные переменные
[HR][/HR]Глобальные переменные - это переменные, которые доступны всей программе, включая подпрограммы (пользовательские функции).
Для PHP все объявленные и используемые в функции переменные по умолчанию локальны для функции. То есть, по умолчанию нет возможности изменить значение глобальной переменной в теле функции.
Если вы в теле пользовательской функции будете использовать переменную с именем, идентичным имени глобальной переменной (находящейся вне пользовательской функции), то никакого к отношения глобальной переменной эта локальный переменная иметь не будет. В данной ситуации в пользовательской функции будет создана локальная переменная с именем, идентичным имени глобальной переменной, но доступна данная локальная переменная будет только внутри этой пользовательской функции.
Поясним данный факт на конкретном примере:
Код:
<?php
$a = 100;
function funct() {
$a = 70;
echo "<h4>$a</h4>";
}
funct();
echo "<h2>$a</h2>";
?>
Для избавления от приведенного недостатка, в PHP существует специальная инструкция global, позволяющая пользовательской функции работать с глобальными переменными. Рассмотрим данный принцип на конкретных примерах:
Код:
<?php
$a = 1;
$b = 2;
function Sum()
{
global $a, $b;
$b = $a + $b;
}
Sum();
echo $b;
?>
Второй способ доступа к переменным глобальной области видимости - использование специального, определяемого PHP массива $GLOBALS. Предыдущий пример может быть переписан так:
Использование $GLOBALS вместо global:
Код:
<?php
$a = 1;
$b = 2;
function Sum()
{
$GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"];
}
Sum();
echo $b;
?>
Статические переменные
[HR][/HR]Помимо локальных и глобальных переменных, в PHP существует еще один тип переменных - статические переменные.
Если в теле пользовательской функции объявлена статическая переменная, то компилятор не будет ее удалять после завершения работы этой функции.
Объявление статических переменных:
Код:
<?php
function funct(){
static $int = 0; // верно
static $int = 1+2; // неверно (поскольку это выражение)
static $int = sqrt(121); // неверно (поскольку это тоже выражение)
$int++;
echo $int;
}
?>
<?php
function funct()
{
static $a;
$a++;
echo "$a";
}
for ($i = 0; $i++<10
?>
Данный сценарий выводит строку:
Код:
1 2 3 4 5 6 7 8 9 10
Код:
1 1 1 1 1 1 1 1 1 1
[HR][/HR]
