命名空间用来解决两类问题:
用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。
任意PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响:类(包括抽象类和traits)、接口、函数和常量。
专业词解释
非限定名称(Unqualified name) 名称中不包含命名空间分隔符(\)的标识符,例如 Foo
限定名称(Qualified name) 名称中含有命名空间分隔符的标识符(\),例如 Foo\Bar
完全限定名称(Fully qualified name) 名称以命名空间分隔符开始的标识符(\),例如 \Foo\Bar。 namespace\Foo 也是一个完全限定名称(注意namespace是个关键字)。
个人理解:
将命名空间等价为linux系统的文件路径
你当前命名空间是space.那么就相当于你在目录space下进行操作,你要使用这个空间下的如果space\test 的方法 fun(), 那么就是test\fun();系统会自动完善为space\test\func();
所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:
定义子命名空间
PHP命名空间也允许指定层次化的命名空间的名称:eg : namespace MyProject\Sub\Level;
在同一个文件中定义多个命名空间(不推荐使用)
方式1
命名空间和动态语言特征
同理函数和常量
__NAMESPACE__常量
可以获得当前的命名空间名称
使用命名空间:别名/导入
注意对命名空间中的名称,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。
为了简化操作,PHP还支持在一行中使用多个use语句
全局空间
使用命名空间:后备全局函数/常量
对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP会退而使用全局空间中的函数或常量.
对于类如果没有找到则会报错.不会去使用全局空间中的类