PHP新特性——命名空间

来源:互联网 发布:视频直播软件开发 编辑:程序博客网 时间:2024/06/18 07:35

命名空间:

       现代的PHP特性中最重要的恐怕就是命名空间了,如果曾经接触过java、C#等语言的话,大概对这个名词不会太陌生,而命名空间则是在PHP5.3.0中引入的。

       其作用是按照一种虚拟的层次结构组织代码PHP代码,这种层次结构类似操作系统中文件系统的目录结构。

      *现代的PHP组件和框架都放在各自的全局唯一的厂商命名空间中,以免与其他厂商使用的常见类名冲突。

声明命名空间:

<?phpnamespace Toby\son1\son2;class Test {# code...}  

代码中第二行语句就是PHP命名空间声明语句。这句代码代码告诉我们,Test类在厂商命名空间Toby里面的,而且也在后面son1、son2两个子命名空间里面。

*声明命名空间的代码始终应该放在<?php标签后的第一行,PHP命名空间是一个虚拟概念,没有必要与物理文件系统中文件目录保持一致,但是大多数时候我们都会这样做,因为对于个人来说易于使用,对于PHP组件是为了兼容PSR-4标准。

另外我们可以在不同的文件中编写属于同一个命名空间的多个类。

使用命名空间:

<?php$response= new \Toby\son1\son2\Test('test','100');$response->send();

<?phpuse Toby\son1\son2\Test;$response= new Test('test','100');$response->send();
以上两种方法都是使用命名空间,显然第二种更为方便,我们通过use关键字告诉PHP我们想使用Test类,并且只需输入一次完全限定的类名,随后直接实例化。

当然如果特别懒的话,还可以使用别名,如下:

<?phpuse Toby\son1\son2\Test as T;$r= new T('test','100');$r->send();

从PHP5.6开始还可以导入函数和变量,不过要调整use关键字的句法,如果想导入函数,要把use改成use func:

<?php use func Namespace\functionName;functionName();

如果想导入常量,要把use改成use constant:

<?php use constant Namespace\CONST_NAME;echo CONST_NAME;
函数和常量的别名与类别名的创建方式一样。


另外,PHP允许在一个PHP文件中定义多个命名空间,如下:

<?php namespace A{#code.......}<?php namespace B{#code.......}
*但是这么做总是让人感觉不舒服,违背了一个文件定义一个类的良好时间,一个文件使用一个命名空间,代码简单,易于纠错,因此此种情况不建议使用。


有些代码可能没有命名空间,这些代码在全局命名空间中,PHP原生的Exception类就是如此,在命名空间中引用全局命名空间中的代码时,要在类、接口、函数或常量的名称前加上 \ 符号,例如:

<?php namespace My\APP;class A{public function doSomething(){throw new \Exception();}}



PS:发现有误!请及时纠正,谢谢!





原创粉丝点击