命名空间
也称名称空间,是一个比较宽泛的概念。什么是命名空间?广义上,可以理解为用来封装各个项目的方法。我看了一下书上介绍的也不是很好理解,但是php官方介绍了一段文字比较通俗易懂。摘抄如下:
在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件
foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt
文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到
/home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:
- 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
- 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。下面是一个说明 PHP 命名空间语法的示例:
<?php
namespace my\name; // 参考下面"定义命名空间" 小节
class MyClass {}
function myfunction() {}
const MYCONST = 1;
$a = new MyClass;
$c = new \my\name\MyClass; // 参考 "全局空间" 小节
$a = strlen('hi'); // 参考 "使用命名空间:后备全局函数/常量" 小节
$d = namespace\MYCONST; // 参考 "namespace操作符和__NAMESPACE__常量” 小节
$d = __NAMESPACE__ . '\MYCONST';
echo constant($d); // 参考 "命名空间和动态语言特征" 小节
?>
注意:
名为PHP或php的命名空间,以及以这些名字开头的命名空间(例如PHP\Classes)被保留用作语言内核使用,而不应该在用户空间的代码中使用。
定义命名空间
命名空间通过关键字namespace
来声明。如果一个文件中包含命名空间,它必须在其他所有代码之前声明命名空间。除了前面学过的标量类型的声明(因为标量类型declare需要在所有字符之前声明,也就是说除了declare外,命名空间都是写在第一条的语句)
<html>
<?php>
namespace Myname; //这样是错误的,命名空间必须是程序脚本的第一条语句
?>
</html>
另外,与PHP其他的语言特征不同,同一个命名空间可以定义在多个文件中,即允许将同一个命名空间的内容分割存放在不同的文件中。
定义子命名空间
与目录和文件的关系很像,PHP命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:
<?php
namespace my\test\xuexi;
?>
具体更多使用方法,到这里查找:
PHP官方帮助手册
包含命名空间中所有的用法,基础,定名,子命名空间,别名/导入、全局空间等等。是中文的。