命名空间
1命名空间基础
定义:命名空间namespace,是指人为将内存进行分隔,让不同的内存区域的同名结构共存.从而解决在大型项目中可能出现的重名问题.类似文件夹
1基本语法:namespace 命名空间名字;
namespace my_space;//定义空间
2.namespace起名规则:
- 由字母,数字,下划线构成
- 由字母和下划线构成
- 较少出现多单词空间名,一般使用下划线法
3.namespace的作用:能够创建同名结构,包括函数,常量和类
4. namespace里的内容
- 不同namespace里可以有同名的函数,常量和类(结构),称为空间元素 -- (这些东西都在代码段)
- namespace里可以有代码
5. namespace注意事项:1个文件中的命名空间第一次声明必须在所有代码之前
总结
2namespace子空间
定义:子空间,即在已有空间之上,再在内部进行空间划分,让每个小空间独立起来.
1.命名空间子空间:格式为:namespace 空间名\空间名\空间名...;
2.可直接建立多层namespace子空间
和文件夹不同,不用像先建父文件夹再建子文件夹那样操作
总结
3命名空间访问
1. 非限定名称访问:即直接访问空间元素的名字,此类访问访问的是当前代码所属当前名称空间内的元素
注意:非限定名称访问好比访问当前文件夹下所拥有的文件.当前文件夹(命名空间)中找不到即报错!
2. 限定名称的访问:在访问元素的前面使用相应的空间名字,非限定名称的访问是基于子空间来实现的
注意:限定名称好比访问当前文件夹下子文件夹内容
3.完全限定名称:即从根目录\(全局空间)开始访问,类似绝对路径
总结:
全局空间
定义:全局空间,即空间元素在没有定义空间的情况下所属的空间,也是所有定义的空间的顶级空间.即所有空间都是从全局空间分离出来的.
1.没有指定空间的元素所属的空间属于全局空间
2. 所有空间本质都是在全局空间下的划分
3. 全局空间元素的访问:使用完全限定名称访问
4. 一旦命名空间出现,那么空间元素:类,常量和函数的访问就被限制在空间内,如果使用非限定名称访问,那么系统解析会按以下解析逻辑(限定名称或完全限定名称是直接按路径准确找)
- 首先是一定在自己空间内查找
- 如果找不到元素,不同空间元素的处理不同
- 系统常量,系统函数如果找不到,会自动到全局空间去找(也就是能找到)
- 系统类是不会自动去全局空间找的(报错:提示当前所属空间内元素找不到)
5. 有命名空间的文件包含了1个无命名空间(即全局空间)的文件,那么要访问无命名空间中的元素,需要使用全局空间
总结:
命名空间应用
定义:命名空间应用模拟真实开发环境,来运用命名空间规则
1. 创建文件夹:模拟实际项目
2. 业务说明
- root根目录:存放用户可以直接访问的文件,文件都是请求controller里的文件
- controller目录:存放业务逻辑文件,所有业务都是类文件,业务要操作数据库,请求model里的文件,属于controller空间
- model目录:存放数据库操作的类文件,属于model空间
- core目录:核心工具的存放,属于core空间
3. 创建3个文件:分别代表root目录下(不需要空间),controller目录下的controller空间,model目录下的model空间
4. 代码说明
总结
命名空间引入
定义:命名空间引入其实就是将另外一个空间的元素(类,函数和常量)引入到当前空间来,当做当前空间的元素访问,从而减少复杂的完全限定名称访问,取而代之的是非限定名称访问.
1. 空间引入方式:use关键字
注意:use进行空间引入的时候,默认是从全局空间开始构建空间路径的(不是自己空间的相对路径),所以上述代码等于如下代码