@gvg1

Почему global не действует на переменную, инициализированную во внешней функции?

Почему следующий код на PHP печатает 7, а не 12?
fext();
function fext(){
  $var1=5;
  eсho fint();
  return 1;
};
function fint(){
  global $var1;
  $var1=$var1+7;
  return $var1;
};

Этот работает, как ожидается, т. е. печатает 12.
$var1=5;
echo fint();
function fint(){
  global $var1;
  $var1=$var1+7;
  return $var1;
};

Этот тоже печатает 12.
$var1=5;
fext();
function fext(){
  global $var1;
  eсho fint();
  return 1;
};
function fint(){
  global $var1;
  $var1=$var1+7;
  return $var1;
};

Мне нужен 1-й вариант, т. е., чтобы global сработал на переменную, инициализированную в вышестоящей функции.
  • Вопрос задан
  • 232 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Vitsliputsli

Почему следующий код на PHP печатает 7, а не 12?

Потому что это не js. А global работает ровно так как описано в доке, по-другому никак, т.к. область видимости работает иначе в языке.
А делать надо так, чтобы функция внутри себя не обращалась с произвольными данными извне, только с теми, которые вы заранее объявили. Только так можно контролировать код. А значит global не нужен.
Ответ написан
Комментировать
@dxp
Web developer
в первой функции $var1 локальная, просто тоже объявите ее как global
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы