Если ваш код зависит от того, что для работы должно присутствовать что-то глобальное или внешнее (например, для его установки требуется sqlite), вы можете использовать @use в качестве Не упоминалось .
ОДНАКО ...
В целом, я бы сказал, что плохая практика - заполнять функцию или использовать глобальные переменные (или использовать суперглобальные переменные), так как это нарушает инкапсуляцию функции и создает сильную зависимость между кодом внутри функции и снаружи. .
Если какой-либо код, внешний по отношению к функции, должен создавать или обращаться к этим глобальным переменным, значения должны вместо этого передаваться в качестве параметров функции.
Например, вместо
function doMagic(){
if ($_SESSION['use_black_magic'] == true){ // var coming from the outside
$_SESSION['magic_results'] = 'dead chicken';
}else{
$_SESSION['magic_results'] = 'unicorn';
}
}
$_SESSION['use_black_magic'] = false;
doMagic();
echo $_SESSION['magic_results']; // (unicorn) variable set within doMagic()
должно быть
function doMagic( $use_black_magic = true ){
if ($use_black_magic == true){
return 'dead chicken';
}else{
return 'unicorn';
}
}
$magic_results = doMagic( false );
echo $magic_results; // unicorn
Таким образом, doMagic () не нужно ничего знать о том, где должны храниться результаты, и где найти значение параметра. А внешнему коду не нужно знать, что функция doMagic () что-то делает с переменными $ _SESSION.
Как только ваш код немного растет, его поддержка, совместное использование, отладка и расширение такого рода кода становятся кошмаром ...