如果你对该文章中的内容有疑问/不解,可以点击此处链接提问
要注明问题和此文章链接地址 点击此处跳转
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
1.命名空间概述 1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。 2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。 2.定义命名空间 语法 namespace 命名空间名 特点 1.命名空间必须在PHP5.3以上 2.命名空间前面不允许有任何代码.. (除了namespace),它的作用范围:到下一个namespace开始或脚本结束 3.命名空间只对本脚本起作用 4.文件如果没有定义命名空间,默认在全局命名空间中. 3.定义子命名空间 namespace abc\def\hhh; 4.在同一个文件中定义多个命名空间 1.不推荐, 一般一个脚本只有一个命名空间 2.万不得已,建议使用{ } 来包括命名空间代码 5.使用命名空间:基础 1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。详情参见 使用命名空间:后备全局函数名称/常量名称。 2. 限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。 3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。 6.命名空间和动态语言特征 如果把函数名类名常量名 以动态的形式去调用. 在命名空间里 使用 完全限定名称的方式去调用他. 7.namespace关键字和__NAMESPACE__常量 7.1 关键字 1).定义命名空间 2).可以用来简化调用 7.2 常量 __NAMESPACE__ 可以获取本命名空间的名字 8.使用命名空间:别名/导入 别名 use 命名空间 [as 别名] 导入 use 命名空间\类名 只能导入类 9.全局空间 绝对不可以缺少{}的包括 namespace{ ..... } } 10.使用命名空间:后备全局函数/常量 11.名称解析规则 非限定名称 限定名称 完全限定名称 |