Почему переменная, объявленная во внешней функции, не видна внутри функции с помощью ключевого слова global?

Почему в первом фрагменте кода на PHP выводится 7 вместо 12? Как сделать так, чтобы использование global в функции применялось к переменной, инициализированной в вызывающей функции?
  • 7 декабря 2023 г. 16:19
Ответы на вопрос 2
Переменная, объявленная во внешней функции, не видна внутри функции с помощью ключевого слова global из-за того, что переменные, созданные внутри функции, являются локальными для этой функции и не видны в других функциях. Ключевое слово global используется для доступа к глобальным переменным, которые были объявлены вне функций.

В первом фрагменте кода на PHP выводится 7 вместо 12 потому, что оператор global в функции my_func() позволяет получить доступ к глобальной переменной $x, но затем происходит присваивание значения 7 этой переменной. Это происходит из-за того, что оператор global только объявляет, что используется глобальное имя переменной, и все последующие операции с этой переменной будут выполняться с глобальной переменной, а не с локальной.

Чтобы использование global в функции применялось к переменной, инициализированной в вызывающей функции, нужно использовать ключевое слово global в обеих функциях. Примерно так:
```
function outer_func() {
    global $x;
    $x = 12;

    function inner_func() {
        global $x;
        echo $x;
    }

    inner_func();
}

outer_func();
```
В этом примере вызов inner_func() внутри outer_func() также будет иметь доступ к глобальной переменной $x.
Почему следующий код на PHP печатает 7, а не 12?Потому что это не js. А global работает ровно так как описано в доке, по-другому никак, т.к. область видимости работает иначе в языке.А делать надо так, чтобы функция внутри себя не обращалась с произвольными данными извне, только с теми, которые вы заранее объявили. Только так можно контролировать код. А значит global не нужен.
Похожие вопросы