betik, твои аргументы выглядят крайне слабо. Однако я немного помогу тебе.
Глобальные переменные несомненно необходимы. Если есть некая сущность используемая большинством функций (методов классов) скрипта, или эта сущность по своей сути глобальна, то совершенно логичным является размещение такой переменной в глобальном пространстве имён.
Простые примеры:
$CONFIG - массив конфигурационных параметров
$oDb - объект абстрактного доступа к базе данных
$oUser - объект пользовательской сессии
$oTmpl - объект шаблонизатора
$aLang - массив фраз многоязыкового интерфейса
$oPage - объект управления отображением страницы
...
...
Если в классах теоретически эти переменные можно унаследовать агрегированием при создании каждого экземпляра (что с моей точки зрения просто извращение), то в функции придётся передавать множество параметров, которые имеют очень слабое отношение к этой функции. А это сильно ухудшает понятность кода.
Одним словом директива global, является крайне правильной и необходимой директивой, балансирующей возможности языка в связи с локальностью пространства имён в пределах функций.
betik, я не совсем понимаю, как ты себе представляешь
по умолчанию переменные внешние видны внутри ф-ии
в языке, не требующем явного объявления переменных.
Здесь я кстати не вижу никаких проблем, алгоритм мог быть такой: если переменная не найдена в таблице имён локальной области видимости функции, производится поиск в таблице глобальной области видимости, если переменной нету и там, то она создаётся в соответствии со стандартной процедурой создания не объявленной переменной (получает null значение). Как видно здесь производится двойная работа, что нерационально для интерпретируемого языка.