< ?php // define this code in the 'MyProject' namespace namespace MyProject; // ... code ...这一行下面的代码都是指定给MyProject命名空间的,为相同代码块嵌套命名空间或定义多个命名空间是不可能的,如果你真这样干,只有最后一个命名空间才能识别,但你可以在同一个文件中定义不同的命名空间代码,如:
< ?php namespace MyProject1; // PHP code for the MyProject1 namespace namespace MyProject2; // PHP code for the MyProject2 namespace // Alternative syntax namespace MyProject3 { // PHP code for the MyProject3 namespace } ?>尽管这么干是可以的,但我建议你不要这么做,最好还是每个文件中只定义一个命名空间,免得把你弄糊涂了。
lib1.php < ?php // application library 1 namespace App\Lib1; const MYCONST = 'App\Lib1\MYCONST'; function MyFunction() { return __FUNCTION__; } class MyClass { static function WhoAmI() { return __METHOD__; } } ?>
现在我们可以在另一个PHP文件包括这段代码,如:
myapp.php < ?php header('Content-type: text/plain'); require_once('lib1.php'); echo \App\Lib1\MYCONST . "\n"; echo \App\Lib1\MyFunction() . "\n"; echo \App\Lib1\MyClass::WhoAmI() . "\n"; ?>在myapp.php中并没有定义命名空间,因此这段代码存在全局空间中,任何对MYCONST、MyFunction和MyClass的直接引用都会失败,因为它们存在于App\Lib1命名空间中,为了调用lib1.php中的代码,我们可以在\App\Lib1命名空间前添加前缀定义一个完全合格的名称,下面是我载入myapp.php时的输出结果:
App\Lib1\MYCONST
App\Lib1\MyFunction
App\Lib1\MyClass::WhoAmI