Приднестровская поддержка XOOPS
Передача параметров по ссылке. Использование глобальных переменных внутри функций
Глобальные переменные — это переменные, объявленные вне функции. В PHP глобальные переменные видны в любой части программы, кроме функций.
Локальные переменные — это переменные, объявленные внутри функции. Локальные переменные видны только внутри тела функции. Если имя локальной переменной совпадает с именем глобальной переменной, то все операции внутри функции осуществляются с локальной переменной, а значение глобальной не изменяется.
Листинг 24 демонстрирует область видимости переменных.
<?php
function f_Sum() {
$var1 = 5;
$number = 1;
echo 'Локальная переменная $var1 = ' . $var1 . '<br>';
echo 'Локальная переменная $number = ' . $number . '<br>';
echo 'Глобальная переменная $var2 = ' . gettype($var2);
echo ', т. е. не видна внутри функции<br>';
return ($var1 + $number);
}
$var1 = 10;
echo 'Глобальная переменная $var1 = ' . $var1 . '<br>';
$var2 = 7;
$var3 = f_Sum(); // Вызов функции
echo 'Глобальная переменная $var1 осталась = ' . $var1 . '<br>';
echo 'Локальная переменная $number = ' . gettype($number);
echo ', т. е. не видна вне тела функции';
?>
В окне Web-браузера получим следующий результат:
Notice: Undefined variable: number in C:\Apache2\htdocs\
test.php on line 16
Локальная переменная $number = NULL, т. е. не видна вне тела функции
Как видно из примера, переменная $number, объявленная внутри функции f_Sum(), не доступна вне функции. Объявление внутри функции локальной переменной $var1 не изменило значения одноименной глобальной переменной. А глобальная переменная $var2 не видна внутри функции f_Sum().(1)
Для того чтобы глобальная переменная была видна внутри функции, необходимо перед именем переменной внутри функции указать ключевое слово global. Продемонстрируем это на примере (листинг 25).
Листинг 25. Использование глобальных переменных внутри функции
<?php
function f_Sum() {
global $var1;
$number = 2;
echo 'Глобальная переменная $var1 внутри функции = ';
echo $var1 . '<br>';
$var1 += $number;
}
$var1 = 10;
echo 'Глобальная переменная $var1 вне функции = ' . $var1 . '<br>';
f_Sum(); // Вызов функции
echo 'Значение переменной $var1 после функции = ' . $var1 . '<br>';
?>
В окне Web-браузера получим следующий результат:
Кроме того, можно передать глобальную переменную в функцию по ссылке (листинг 26). В этом случае создается переменная, которая не имеет собственного значения, а содержит ссылку на исходную переменную. Любые изменения, применяемые к ссылке, влияют и на глобальную переменную. При передаче по ссылке перед именем переменной в определении функции указывается знак &.
Листинг 26. Передача глобальной переменной в функцию по ссылке
<?php
function f_Sum(&$var1) {
$number = 2;
echo 'Глобальная переменная $var1 внутри функции = ';
echo $var1 . '<br>';
$var1 += $number;
}
$var1 = 10;
echo 'Глобальная переменная $var1 вне функции = ' . $var1 . '<br>';
f_Sum($var1); // Вызов функции
echo 'Значение переменной $var1 после функции = ' . $var1 . '<br>';
?>
В итоге, в окне Web-браузера получим такой же результат:
Внутри функции к глобальной переменной можно обратиться через суперглобальный массив $GLOBALS (листинг 27).
Листинг 27. Использование суперглобального массива $GLOBALS
<?php
function f_Sum() {
$number = 2;
echo 'Глобальная переменная $var1 внутри функции = ';
echo $GLOBALS['var1'] . '<br>';
$GLOBALS['var1'] += $number;
}
$var1 = 10;
echo 'Глобальная переменная $var1 вне функции = ' . $var1 . '<br>';
f_Sum();
echo 'Значение переменной $var1 после функции = ' . $var1 . '<br>';
?>
В итоге, в окне Web-браузера получим такой же результат:
Если создать новый элемент в массиве $GLOBALS, то автоматически будет создана глобальная переменная с таким же названием:
if (!isset($var1)) echo 'Переменная $var1 не определена<br>';
$GLOBALS['var1'] = 10;
echo 'Значение переменной $var1 = ' . $var1;
В итоге, в окне Web-браузера получим результат:
Отправитель | Нити |
---|
4 пользователь(ей) активно (3 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 4 далее... |