Я такой могучий программист на PHP , что толком не сталкивался с видимостью, но возможно сталкивался в 5 версии, где область видимости была какая-то глобальная что ли..
Короче 7, 8 версии, видимость ограничена и то что в функциях оно тупо не видит ничего из-вне. Поэтому она имеет доступ только к тому что ей передали, или к глобальным переменным или к статическим, но их я не понял
Глобальные тоже имеют 2 варианта, с объявлением глобальности каждый раз в функции и тупо из глобального хэша.
А теперь вспомним Perl могучий, где область видимости по умолчанию всегда глобальная и переменные объявленные где угодно, доступны где попало. Кажется так же работает и LUA.
Конечно мне кажется правильный путь когда все нахрен закрыто, что бы не было пересечений, и челики понимали что чтобы использовать что-то из-вне, надо это передать.