<?php /**命名空间 */ namespace One{ const NAME = 'xiaopi'; class Db { public static function demo() { return __METHOD__; } } function hello() { return '你好'.NAME.'<hr>'; } //echo hello(); //echo \Two\NAME; } namespace Two{ const NAME = 'xiaoli'; class Db { public static function demo() { return __METHOD__; } } function hello() { return '你好'.NAME.'<hr>'; } echo NAME; //非限定名称,类似当前目录的文件 全命名空间使用 echo THREE\Show::NAME.'<br>'; //限定名称:使用全名空间前缀 类似子目录/相当目录 echo \One\NAME.'<hr>'; //完全限定名称:从根空间或全局空间开始向下访问 echo \Two\THREE\Show::NAME; echo THREE\Show::NAME.'<br>'; } namespace Two\THREE{ class Show { const NAME = '我是'.__NAMESPACE__.'常量'; } } namespace { echo One\db::demo(),'<br>'; echo Two\db::demo(),'<br>'; echo Two\THREE\Show::NAME; } //1.多个命名空间之间的分隔符是反斜线\ //2.全局空间和根空间也是反斜线 //3.一个文件中有多个命名空间时访问全名空间下的常量需要注意顺序,如果在类中可以不在意顺序直接访问
点击 "运行实例" 按钮查看在线实例
<?php /** * 使用命名空间 */ namespace TEST2; include 'test3.php'; use TEST3\Test3; use TEST3\Test2 as newtest; use TEST4\a\b\c\d\Test4 as T4; class Test2{ public static function test2(){ return __METHOD__; } } echo Test2::test2().'<br>'; echo newtest::test3().'<br>'; echo Test3::test3().'<br>'; echo T4::test4();
点击 "运行实例" 按钮查看在线实例
<?php namespace TEST3; class Test3{ public static function test3(){ return __METHOD__; } } class Test2{ public static function test3(){ return __METHOD__; } } namespace TEST4\a\b\c\d; class Test4{ public static function test4(){ return'我是<strong style="color:red;">'.__METHOD__.'</strong>方法'; } }
点击 "运行实例" 按钮查看在线实例
4.非限定名称,限定名称和完全限定名称的命名空间之间的区别与联系是什么?
非限定名称: 当前文件或空间中使用时.省略空间名称,使用默认或当前的命名空间 . demo1
限定名称:通常用在子父类访问,或全局空间访问其他空间 前面需要添加命名空间才可访问 demo/ demo/demo1
完全限定名称:用在从根空间/目录访问时 包含了全局前缀操作符及空间名称 /deom/demo1
三者的关系就是像一个目录文件 可以理解为: 完全限定名称>限定名称>非限制名称 很类似 linux下访问目录的规则.
1.cd /1/2/3 完全限制精确打开
2.cd ../1 上级或cd 2/3 下级
3.不限制名称 当前目录直接打开 cd 2