Можно ли перенести все глобальные переменные php в локальную область функции?

Чтобы использовать переменные вне функции, я должен сделать это:

<?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; 

    который затем более общий, способный принимать разные аргументы или более двух аргументов и полезен в гораздо большем количестве ситуаций.