PHP新特性——命名空间

16 篇文章 0 订阅

命名空间:

       现代的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:发现有误!请及时纠正,谢谢!





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值