Задача
Необходимо получить доступ к глобальной переменной внутри функции.
Решение
Поместите глобальную переменную в локальную область видимости с помощью ключевого слова 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'];