PHP新特性——命名空间
2017-10-11 18:07
393 查看
命名空间:
现代的PHP特性中最重要的恐怕就是命名空间了,如果曾经接触过java、C#等语言的话,大概对这个名词不会太陌生,而命名空间则是在PHP5.3.0中引入的。
其作用是按照一种虚拟的层次结构组织代码PHP代码,这种层次结构类似操作系统中文件系统的目录结构。
*现代的PHP组件和框架都放在各自的全局唯一的厂商命名空间中,以免与其他厂商使用的常见类名冲突。
声明命名空间:
代码中第二行语句就是PHP命名空间声明语句。这句代码代码告诉我们,Test类在厂商命名空间Toby里面的,而且也在后面son1、son2两个子命名空间里面。
*声明命名空间的代码始终应该放在<?php标签后的第一行,PHP命名空间是一个虚拟概念,没有必要与物理文件系统中文件目录保持一致,但是大多数时候我们都会这样做,因为对于个人来说易于使用,对于PHP组件是为了兼容PSR-4标准。
另外我们可以在不同的文件中编写属于同一个命名空间的多个类。
使用命名空间:
当然如果特别懒的话,还可以使用别名,如下:
从PHP5.6开始还可以导入函数和变量,不过要调整use关键字的句法,如果想导入函数,要把use改成use func:
如果想导入常量,要把use改成use constant:
另外,PHP允许在一个PHP文件中定义多个命名空间,如下:
有些代码可能没有命名空间,这些代码在全局命名空间中,PHP原生的Exception类就是如此,在命名空间中引用全局命名空间中的代码时,要在类、接口、函数或常量的名称前加上 \ 符号,例如:
PS:发现有误!请及时纠正,谢谢!
现代的PHP特性中最重要的恐怕就是命名空间了,如果曾经接触过java、C#等语言的话,大概对这个名词不会太陌生,而命名空间则是在PHP5.3.0中引入的。
其作用是按照一种虚拟的层次结构组织代码PHP代码,这种层次结构类似操作系统中文件系统的目录结构。
*现代的PHP组件和框架都放在各自的全局唯一的厂商命名空间中,以免与其他厂商使用的常见类名冲突。
声明命名空间:
<?php namespace 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();
<?php use Toby\son1\son2\Test; $response= new Test('test','100'); $response->send();以上两种方法都是使用命名空间,显然第二种更为方便,我们通过use关键字告诉PHP我们想使用Test类,并且只需输入一次完全限定的类名,随后直接实例化。
当然如果特别懒的话,还可以使用别名,如下:
<?php use 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:发现有误!请及时纠正,谢谢!
相关文章推荐
- PHP5.3新特性之命名空间
- PHP新特性之命名空间、性状和生成器
- PHP5.3新特性之命名空间
- PHP 5.3新特性命名空间规则解析及高级功能
- PHP新特性详解之命名空间、性状与生成器
- PHP关键特性之命名空间实例详解
- PHP 5.3新特性命名空间规则解析及高级功能
- PHP基础----面向对象相关特性----10类和命名空间介绍
- php5.3新特性(一) -- 命名空间
- PHP 高级特性-命名空间
- PHP中的命名空间
- PHP中的命名空间(namespace)及其使用详解
- php命名空间
- phpPHP命名空间相关笔记
- 详细解读php的命名空间(一)
- php--------命名空间
- PHP 5.3 中的命名空间
- 好的PHP库离不开一个好的命名空间
- 慕课网----大话PHP设计模式 一(命名空间,类的自动加载,PSR-0)
- PHP使用Memcache时模拟命名空间及缓存失效问题的解决