Причина, по которой это чаще встречается в PHP, чем другие подобные языки, связана с историей PHP. В ранних версиях PHP по умолчанию был установлен параметр register_globals (на самом деле, он может даже не быть настройкой в действительно ранних версиях). Register_globals говорит PHP определять глобальные переменные в соответствии со строкой запроса. Так что если вы запросили такой скрипт таким образом:
http://site.com/script.php?hello=world&foo=bar
... скрипт автоматически определит переменную $ hello со значением «world» и $ foo со значением «bar».
Для такого сценария, если вы знали имена ключевых переменных, можно было использовать сценарий, указав эти переменные в строке запроса. Решение? Определите некоторую магическую строку в базовом сценарии, а затем заставьте все вспомогательные сценарии проверить наличие магической строки и выручить, если ее там нет.
К счастью, почти никто больше не использует register_variables, но многие скрипты все еще написаны очень плохо и делают глупые предположения, которые заставляют их наносить ущерб, если они вызываются вне контекста.
Лично я избегаю всего этого, используя платформу Symfony, которая (по крайней мере, в его настройке по умолчанию) вообще не допускает контроллеров и шаблонов из веб-корня. Единственной точкой входа является передний контроллер.