Переменная, объявленная во внешней функции, не видна внутри функции с помощью ключевого слова 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.