Чтобы использовать переменные вне функции, я должен сделать это:
<?php $a = 1; $b = 2; function Sum() { global $a, $b; $b = $a + $b; } Sum(); echo $b; ?>
Что делать, если есть много глобальных переменных, и я просто хочу, чтобы все они были локально локализованы внутри функции? Как это сделать, не сохраняя длинный список глобальных объявлений в начале каждой функции? Меня не интересуют лучшие практики или все причины, по которым это может считаться опасным.
В идеале все ваши функции должны быть в параметре.
function Sum($a, $b) { return $a + $b; }
Если вы действительно не можете избежать ссылки на переменные вне области вашей функции, у вас есть несколько вариантов:
Используйте массив $ GLOBALS:
function Sum() { return $GLOBALS['a'] + $GLOBALS['b']; }
Используйте global
ключевое слово:
function Sum() global $a, $b; return $a + $b; }
Используйте «анонимную» функцию и вставляйте глобалы
$Sum = function() use ($a, $b) { return $a + $b; } $result = $Sum();
Анонимные функции более полезны, если вы хотите работать с переменными в области функционального объявления, которые не являются глобальными.
извлечь () из $GLOBALS
function Sum() { extract($GLOBALS); return $a + $b; }
Этот последний вариант будет тянуть во всех глобалах, и, похоже, это то, что вы ищете.
Но серьезно , при необходимости, параметризуйте.
Почему вы не делаете что-то вроде:
$a = 1; $b = 2; function Sum() { $args = func_get_args(); $result = 0; foreach($args as $arg) { $result += $arg; } return $result; } $b = Sum($a, $b); echo $b;
который затем более общий, способный принимать разные аргументы или более двух аргументов и полезен в гораздо большем количестве ситуаций.