PHP5.3当中就引入了“命名空间”的概念,一直都没怎么关注和使用,其实学习它也挺简单的,看官方的教程就好了:php
命名空间概述html
定义命名空间函数
定义子命名空间学习
使用命名空间:基础.net
namespace关键字和__NAMESPACE__常量htm
使用命名空间:别名/导入blog
注意:PHP 命名空间目前仅支持 类名称 和 命名空间 的导入,暂不支持导入函数或常量!教程
FAQ: things you need to know about namespaces
学习、实践笔记:
一、定义命名空间时,命名空间开头不能有反转义符“\”,即 namespace \A\B\C; 是错误的,此命名空间将不起做用!namespace A\B\C; 才是对的。
二、导入命名空间时,若是命名空间是一级的,则开头必定要加反转义符“\”,即 use A; 是错误的,use \A; 才是对的。
三、导入命名空间时,若是命名空间是二级或更多级的,则开头有没有加反转义符“\”效果都是同样,即都表示 彻底限定名称,如 use A\B\C; 跟 use \A\B\C; 是等效的。(若是是多级的,建议开头不加“\”)
四、对于“非限定名称函数/常量”,若是 当前命名空间 有,则调用当前命名空间下的该 函数/常量,不然,继续到 全局命名空间 下去找,有,则调用,没有,则报错!
五、对于“非限定名称类”,若是 当前命名看空间 有,则调用当前命名空间下的该 类,没有,则调用__autoload函数,尚未的话,就直接报错!即不会继续到 全局命名空间 下去找了!
六、对于“限定名称函数/常量”,若是 当前命名看空间 有,则调用当前命名空间下的该 限定名称函数/常量,没有,则直接报错!即不会继续到 全局命名空间 下去找了!
七、对于“限定名称类”,若是 当前命名看空间 有,则调用当前命名空间下的该 限定名称类,没有,则调用__autoload函数,尚未的话,就直接报错!即不会继续到 全局命名空间 下去找了!
八、上面说的常量指的是经过关键字const定义的常量,而函数define()定义的常量是不受命名空间影响的,即在任何地方均可用,具备全局性!另外 global 变量也不受命名空间影响!
额,补充一点,还有可能到 导入的命名空间 下去找!
使用建议:
一、强烈推荐使用“命名空间”的功能;
二、只把“类”命令空间化,其余的(如函数、常量)最好仍是设计为全局性,即放在全局命名空间中,方便调用;
三、命名空间 + autoload机制,实现“类文件”自动加载;