Тоесть, да, сейчас они глобальные. Но по идеологии неймспейсов $var не будет глобальным, а будет упрятан в пространство test. И обращение должно быть через test:: $var. Эта переменная глобальная, относительно пространства test, но за пределами, она не будет уже никак глобальной. Точнее была бы, так как сейчас этого как раз -таки нет.<?
namespace test;
$var = 1; // Она будет видна без обращения через test:: и не будет доступна через test::$var
?>
А ничего не надо делать. Переменная находящая с каком-либо пространстве имен не является глобальной по определению(так как она принадлежит не к глобальной области видимости а к вполне определенному пространству имен), а все переменные определенные вне какого-либо пространства имен являются глобальными и должны попасть в массив $GLOBALS.с $GLOBALS что делать?
<? // inc.php
function foo(){ echo 'GLOBAL'; };
?>
<? // NS.php
namespace test;
function foo(){ echo 'LOCAL'; };
foo(); // LOCAL
::foo(); // GLOBAL
?>
<?
include 'inc.php';
include 'NS.php';
foo(); //GLOBAL
test::foo(); //LOCAL
?>
<?
#start include 'inc.php';
function foo(){ echo 'GLOBAL'; };
#end include 'inc.php';
#start include 'NS.php';
namespace test;
function foo(){ echo 'LOCAL'; };
foo(); // LOCAL
::foo(); // GLOBAL
#end include 'NS.php';
foo(); //GLOBAL
test::foo(); //LOCAL
?>
По идее должно быть сначало //GLOBAL а потом //LOCAL, НО так как у меня сейчас нету установленного php 5.3, то проверить я это не могу.у меня вопрос - точно в последнем у меня будет сначало //GLOBAL а потом //LOCAL или всеже наоборот?
ИМХО наиболее логичным было-бы завершать пространство имен концом файла, по этому я и выдвинул такое предположение.по идеи конца namespace test я найти не могу
Major, очень плохоТоесть, отдельный файл,
Переменная локализованная в пространстве имен не является глобальной. Да и обоснованное использование для них найти можно (пример стандартные потоки ввода/вывода в С++ std::cin; std::cout) В php, так можно обращаться например к данным из конфигурационных файлов, так как эти структуры должны создаваться строго один раз и меняться по ходу выполнения не должны.лично меня устраивает все, как есть, я не использую глобальные переменные. ни один современный фреймворк их тоже не использует. а если ваши скрипты выглядят как простыня, то вам неймспейсы мало помогут.
Смысл пространств имен в локализации области видимости, при том не важно чего, функций, классов или переменных.смысл неймспейсов - элегантная замена префиксов в именах классов, и не более того.