无名 发表于 2022-5-8 18:53:45

PHP 命名空间(namespace)

PHP 命名空间(namespace)
PHP 命名空间(namespace)是在PHP 5.3中加入的

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目

录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目

录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问

foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是

命名空间的概念。

PHP 命名空间可以解决以下两类问题:

1.    用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。

2.    为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

定义命名空间
默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。

命名空间通过关键字namespace 来声明。如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。

语法格式如下:

你也可以在同一个文件中定义不同的命名空间代码,如:

在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:

而下面的代码就会报错

” 会致命错误 - 命名空间必须是程序脚本的第一条语句
?>
子命名空间
与目录和文件的关系很象,PHP 命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:

上面的例子创建了常量 MyProject\Sub\Level\CONNECT_OK,类 MyProject\Sub\Level\Connection 和函数MyProject\Sub\Level\Connect。

命名空间使用
在讨论如何使用命名空间之前,必须了解 PHP 是如何知道要使用哪一个命名空间中的元素的。可以将 PHP 命名空间与文件系统作一个简单的类比。在文件系统中访问一个文件有三种方式:

   1. 相对文件名形式如foo.txt。它会被解析为 currentdirectory/foo.txt,其中 currentdirectory 表示当前目录。因此如果当前目录是 /home/foo,则该文件名被解析为/home/foo/foo.txt。

2. 相对路径名形式如subdirectory/foo.txt。它会被解析为 currentdirectory/subdirectory/foo.txt。
http://cdn.u1.huluxia.com/g3/M00/DE/74/wKgBOV2Ws4SAFmAYAAFFyy4BVVA602.pnghttp://cdn.u1.huluxia.com/g3/M00/DE/74/wKgBOV2Ws4SAJ2wLAACAVgZ3B-Q519.jpg
页: [1]
查看完整版本: PHP 命名空间(namespace)