IMHO в PHP, языке, ориентированным в первую очередь на маленькие скрипты, глобальные переменные являются плюсом, упрощающим работу. Чтобы писать большие приложения, есть классы. Кроме того, многие пишут большие приложения по образу C++, разделяя приложение на несколько больших функций.
Глобальные переменные есть почти во всех языках программирования. И подход к ним везде практически одинаков. Мне понравилось как Макконнелл написал главу про глобальные переменные. Если коротко перефразировать - "не бойтесть использовать глобальные переменные, но используйте их только там, где это действительно необходимо, а также соблюдайте несколько простых правил"...
[vs], а кто сказал что PHP ориентирован на маленькие скрипты? Одно дело, что маленький скрипт будет действительно маленьким, а не как в бородатой шутке "пока программист C++ определяет константы, программист на Visual Basic уже пьёт пиво". Язык программирования лишь инструмент, причём PHP-то достаточно гибкий, так что юзать его можно и в маленьких скриптах и в больших CMS.
Изначально PHP был придуман для обработки форм и (!)эмулирования SSI. Что позволило легко писать BBS'ки... Что PHP может лучше, чем те же СиПП или Делфи? Даже на Perl'е можно писать полноценные shell-ы для никсов, PHP же это язык для web-программирования, и использовать его в отвлеченных целях - IMHO извращение. Ресурсоемкими задачами должны заниматься демоны, PHP должен только вызывать из и забирать результат работы
А разве пишутся только простые сайты визитки? Есть очень большие проекты написанные на php (около 200 000 строк) При чем используется OOP и паттерны проектирования в полной мере. На php можно писать простенькие скрипты, но сегодня PHP не ограничивается этим.
Вообще, из пальца высасоно. Если проект цельный, то за переменными следят. Если проект "всякое в кучу", то ты не услидишь за переменными как бы не желал и какие бы умные книжки не читал. namespace не только в виде "оно есть в 5.3", а в виде префиксов-за**пефиксов. Предлагаю всем вместе на него бурно фетишировать. У PHP есть боооольшой минус. Его переменные либо полностью глобальны, либо полностью локальны. Исключая классы, где есть $this - глобальная переменная локального разлива. PHP: <?php $var = 'Hello'; function doit(){ echo $var; } doit(); // кукиш Приходится PHP: <?php $var = 'Hello'; function doit(){ global $var; echo $var; } doit(); // Hello А должо быть PHP: <?php $var = 'Hello'; function doit(){ echo $var; } doit(); // Hello Если переменная перебивается в функции это новая, локальная переменная. Если стоит в global, то перебивается глобально. Python в этом плане сильно рулит. Но ребят с фетишом на неймспейсы это особо не мучает. Мы просто фетишируем себе тихонько.
Ну, это изначально в 95-ых ) Сейчас он уже давно для этого не служит. +1 Лично я, глобальные переменные не использую и не вижу существенного минуса в том, что я их не использую... С локальными работать гораздо удобнее, проще и меньше мороки.
lexa, ознакомься, пожалуста, со значением слова "фетиш". по теме - неконтролируемые замыкания приводят к очень трудноуловимым ошибкам вида: забыл проинициализировать переменную - получи глобальную. Очень интересные результаты можно получить, если допустить такую ошибку в рекурсивной функции.