命名空间用来解决两类问题:

    用户编写的代码与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命名空间

PHP命名空间

定义子命名空间

 PHP命名空间也允许指定层次化的命名空间的名称:eg :  namespace MyProject\Sub\Level;

在同一个文件中定义多个命名空间(不推荐使用)

PHP命名空间

方式1

PHP命名空间

 

命名空间和动态语言特征

PHP命名空间

同理函数和常量

 

PHP命名空间

__NAMESPACE__常量

可以获得当前的命名空间名称

PHP命名空间

使用命名空间:别名/导入

 

PHP命名空间

注意对命名空间中的名称,前导的反斜杠是不必要的也不推荐的,因为导入的名称必须是完全限定的,不会根据当前的命名空间作相对解析。

  为了简化操作,PHP还支持在一行中使用多个use语句

 

全局空间

PHP命名空间

使用命名空间:后备全局函数/常量

PHP命名空间

对于函数和常量来说,如果当前命名空间中不存在该函数或常量,PHP会退而使用全局空间中的函数或常量.

对于类如果没有找到则会报错.不会去使用全局空间中的类

参考:

PHP: 命名空间 - Manual

相关文章:

  • 2019-11-30
  • 2019-12-30
  • 2019-07-10
  • 2021-11-30
  • 2021-10-19
  • 2020-02-06
  • 2021-10-08
  • 2021-09-01
猜你喜欢
  • 2018-06-14
  • 2017-12-01
  • 2020-03-14
  • 2020-04-17
  • 2020-01-15
  • 2019-11-23
  • 2021-09-24
  • 2021-09-24
相关资源
相似解决方案