abstract:理解:命名空间相当于一个国家,类相当于省份,方法相当于市区,但省份之间不可重名,一个省份下的市区不可重名。每个空间下的省份和市区可以和其他空间下的省份和市区重名。知识点:声明命名空间:namespace 空间名;获取当前空间名称:__NAMESPACE__引用当前空间:namespace一个文件中可以命名多个不重名空间,使用:namespace 空间名称{ }全局空间名称为空:name
理解:命名空间相当于一个国家,类相当于省份,方法相当于市区,但省份之间不可重名,一个省份下的市区不可重名。每个空间下的省份和市区可以和其他空间下的省份和市区重名。
知识点:
声明命名空间:namespace 空间名;
获取当前空间名称:__NAMESPACE__
引用当前空间:namespace
一个文件中可以命名多个不重名空间,使用:namespace 空间名称{ }
全局空间名称为空:namespace{ }
全局空间用 \ 根
访问其他空间中的成员,一定要从全局空间开始 \space\
全局空间直接引用同文件空间方法、静态方法、常量:
* namespace1\class\function()
* namespace1\class::function
* namespace1\class::CONSTANT
导入有空间名称的函数库:use function 空间名称\方法;
起别名:use function 空间\方法名称 as xxx;
在空间中可以定义和系统函数同名的函数,使用时优先在当前空间中查找,如果没有找到,就会自动到全局的空间中进行查找。如果想使用系统函数,则在系统函数前加'\',系统函数属于全局:\var_dump()
案例 namespace spaceA{ const ONE = 'ONE'; function getSpace(){ return __NAMESPACE__; } function getMethod(){ return __METHOD__; } class ClassA{ public static function getClass(){ return __CLASS__; } } } namespace spaceB{ const ONE = 'TWO'; function getSpace(){ return __NAMESPACE__; } function getMethod(){ return __METHOD__; } } namespace{ echo '全局直接调用: '.spaceA\getMethod().' 方法和 '.spaceB\getMethod().' 方法<br>'; echo '全局直接调用常量: '.spaceA\ONE.' 和 '.spaceB\ONE.' ,两个空间下同名常量 互不影响<br>'; } namespace spaceC{ use spaceA\ClassA; use function spaceA\getSpace as agetSpace; use function spaceA\getMethod as agetMethod; echo __NAMESPACE__.' 调用'.agetSpace().'中的类: '.ClassA::getClass().'<br>'; echo __NAMESPACE__.' 调用'.agetSpace().'中的方法: '.agetMethod(); }