PHP名称空间学习详解

1。什么是名称空间
命名空间是一种特殊的范围包含一个标识符的作用范围下,也是一个标识符本身。命名空间可以对应操作系统的目录。命名空间是相当于一个目录,一个类,一个函数,命名空间中的一个常数,相当于一个目录中的文件。在同一个目录中的文件的名称(命名空间)也不尽相同,但具有相同名称的文件可以在不同的目录中找到。
2。使用名称空间解决问题是什么
解析名称冲突,例如类的定义,只包含PHP类中的类是类库或包含在类型名中。
为了提高代码可读性,命名空间具有别名功能。它可以帮助您给超过十个字符的类名加上别名,以便缩短代码并避免与其他空间命名冲突。
三.哪个代码受到名称空间的影响。
三个类:类、函数、常量。只有三的兄弟受到影响,还有什么需要做,为什么要这样做。当谈到常数时,PHP 5.3可以使用const关键字来定义常数,5.3在使用定义之前,而名称空间只对const关键字有效。
4。如何定义命名空间
复制代码代码如下所示:
Namespace MyProject;
const connect_ok = 1;后 / / PHP5.3
类连接…
函数(连接){ }…
#例二
Namespace MyProjectSubLevel;
const connect_ok = 1;后 / / PHP5.3
类连接…
函数(连接){ }…

使用名称空间名称声明空格。在名称空间之前,除了声明语句之外,不可能有任何其他PHP语句,也不会有任何非PHP代码,甚至空格。
以下是错误的表单:
复制代码代码如下所示:
$ = 1;
Namespace MyProject;
>
致命错误:名称空间声明语句必须是第一个语句。

此外,同一命名空间可以在多个文件中定义,其中一个组织框架是非常有用的,即同一命名空间如何;文件的开头,他们是相同的命名空间,所以要小心不要有相同的类/函数/常量名称之间的文件。
当然,同一个文件也可以定义多个名称空间,但不太可能这样做。
5。如何使用命名空间
命名空间中有三种形式的用法:
非限定名称不使用任何分隔符。它直接使用类函数常量名称,如新的富(),
复制代码代码如下所示:
< PHP
Namespace MyObject;
新的(食品); / /叫MyObjectFoo();
(Foo)(myobjectfoo / /电话);
回声foo; / /叫MyObjectFOO;

非完全限定名称,不是开始一个分区,比如新subfoo();这种形式是不合格的名称相同的。
复制代码代码如下所示:
< PHP
命名空间MyObject;新(subfoo / /电话);MyObjectSubFoo();

一个完全合格的名称,开始于一个分割的方式,相当于在操作系统中的绝对地址。比如新othernsfoo();
复制代码代码如下所示:
< PHP
命名空间MyObject;新(othernsfoo / /电话);OtherNsFoo();是否MyObject命名空间。

提示:函数和常量有一个特殊的位置(备份全局函数常量)。
复制代码代码如下所示:
< PHP
Namespace MyObject;
funcname(myobjectfuncname); / /如果有叫MyObjectFuncname(),或尝试调用funcname(回声);foo; / /。

还有一个特殊的地方上课。
复制代码代码如下所示:
< PHP
Namespace MyObject;
新的(食品); / / *如果myobjectfoo存在,电话,如果没有,试着在myobjectfoo加载调用__autoload类。
这样就不会自动调用类的类的全局作用域。

在此之前,命名空间有一个别名。
复制代码代码如下所示:
Namespace MyObject;
使用othernssub其他;
使用othernssub2; / / othernssub2作为子相当于使用;
使用/班;
新的(食品); / /叫MyObjectFoo();
新的(otherfoo / /电话);OtherNSSubFoo();
新的(sub2foo); / /电话othernssub2foo();
新的(MyClass); / /叫MyClass();

6。动态命名空间
动态总是可以让人失去思想,但它带来了灵活性,名称空间也可以使用动态语言的特性,但我们应该注意这一点,因为直接调用名称空间是在解析时编译的,而动态特性不是编译时解析,因此我们必须添加前缀:
复制代码代码如下所示:
Namespace MyObjectSub;
新的(食品); / /叫MyObjectSubFoo(),编译时间被解析成myobjectsubfoo
美元= 'foo;
新的(合一); / /调用foo(),MyObjectSubFoo(不)
$ = 'myobjectsubfoo '; / /相当于MyObjectSubFoo
New ($b); / / call MyObjectSubFoo ()
/ /如果你使用双引号,使用,$ = MyObject 亚;


附件1:同一文件定义多个名称空间。
有两种方法:

复制代码代码如下所示:
Namespace MyProject;
const connect_ok = 1;
类连接…
函数(连接){ }…
Namespace AnotherProject;
const connect_ok = 1;
类连接…
函数(连接){ }…


单程,记帐目。
复制代码代码如下所示:
命名空间如何{
const connect_ok = 1;
类连接…
函数(连接){ }…
}
Namespace AnotherProject {
const connect_ok = 1;
类连接…
函数(连接){ }…
}
命名空间
const connect_ok = 1;
类连接…
函数(连接){ }…
}


方法二,使用括号将相同的名称空间代码放入圆括号中。此方法要求除括号之外声明没有其他代码。全局范围的代码由括号括起来,没有空格的名称。