PHP nested namespaces and scopes

Q. Променлива от даден неймспейс важи ли в под-неймспейсите, и под-под-неймспейсите…. и т.н… по принципа на матрьошката?
A. PHP does not allow nested namespacecs.

Ако изпълним следният код…

<?php
namespace MilkyWay;

$a = 'Mlechen Pyt';
const A = 'Mlechen Pyt';


namespace MilkyWay\SolarSystem;
$a = 'Slyncheva Sistema';
const A = 'Slyncheva Sistema';


namespace MilkyWay\SolarSystem\Earth;
$a = 'Zemq';
const A = 'Zemq';


namespace LargeMagellanicCloud;
$a = 'Large Magellanic Cloud';
const A = 'Large Magellanic Cloud';


var_dump(\MilkyWay\A);
var_dump($a);

var_dump(\MilkyWay\SolarSystem\A);
var_dump($a);

var_dump(\MilkyWay\SolarSystem\Earth\A);
var_dump($a);

var_dump(\LargeMagellanicCloud\A);
var_dump($a);

ще получим следните резултати:

string(11) "Mlechen Pyt"
string(22) "Large Magellanic Cloud"

string(17) "Slyncheva Sistema"
string(22) "Large Magellanic Cloud"

string(4) "Zemq"
string(22) "Large Magellanic Cloud"

string(22) "Large Magellanic Cloud"
string(22) "Large Magellanic Cloud"

от които се вижда, че неймспейсите не играят роля за задаване на скоуповете на константи, промеливи и т.н…, а целта и идеята им е изцяло за разграничаване на едноименни константи, променливи и т.н…

Тоест, те имат цел само за избягване на именни колизии и нямат нищо общо с капсулирането в области на видимост (scopes).

Променливите нямат нищо общо с неймспейсите. Например нашата променлива $a не се влияе от това в кой неймспейс е дефинирана. Не можем да имаме нещо от рода на \MilkyWay\$a. Неймспесите са само за класове, константи и функции.

Идеята на неймспейсите е само да гарантират уникалността на имената на класовете, константите и променливите.

Неймспейсите се използват само при класовете и функциите.

Note: Fully qualified names (i.e. names starting with a backslash) are not allowed in namespace declarations, because such constructs are interpreted as relative namespace expressions.
Демек, не може да декларираме неймспейс със namespace \SomeName…;

От примерният код също виждаме, че в един файл можем да имаме повече от един неймспейс, но това е силно непрепоръчително, въпреки че самият език PHP го позволява.