Разработчику. Сборник рецептов PHP
Задавайте вопросы

Доступ к глобальной переменной
внутри функции

Вернуться назад

Задача

Необходимо получить доступ к глобальной переменной внутри функции.

Решение

Поместите глобальную переменную в локальную область видимости с помощью ключевого слова global:

function eat_fruit($fruit) {
     global $chew_count;

     for ($i = $chew_count; $i > 0; $i -- ) {
          ...
     }
}

Или сошлитесь на нее непосредственно в массиве $GLOBALS:

function eat_fruit($fruit) {
     for ($i = $GLOBALS['chew_count']; $i > 0; $i -- ) {
          ...
     }
}

Обсуждение

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

Глобальные переменные можно поместить в локальную область видимости, указав ключевое слово global со списком переменных, разделенных запятыми:

global $age , $gender , shoe_size;

Можно также задавать имена глобальных переменных с помощью переменных переменных:

$which_var = ' age ';
global $$which_var;      // ссылается на глобальную переменную $age

Однако если функция unset() вызывается для переменной, помещенной в локальную область видимости с помощью ключевого слова global, то переменная становится не установленной только внутри функции. Для того чтобы сбросить переменную в глобальной области, надо вызвать функцию unset() для элемента массива $GLOBALS:

$food = ' pizza ';
$drink = ' beer ';

function party() {
     global $food , $drink;
     unset($food);      // едим пиццу
     unset($GLOBALS[' drink ']);      // пьем пиво

}

print " $food: $drink\n ";
party( );
print " $food: $drink\n ";

pizza: beer
pizza:

Видно, что переменная $food остается той же самой, в то время как переменная $drink стала неустановленной. Объявление переменной глобальной внутри функции подобно присваиванию адреса глобальной переменной локальной переменной:

$food = &GLOBALS[' food '];

См. также

Документацию по областям видимости переменных на http://www.php.net/variables.scope и по ссылкам на переменные на http://www.php.net/language.references.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ