美文网首页
命名空间

命名空间

作者: zhyke | 来源:发表于2018-08-15 18:08 被阅读0次

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

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

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

虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits)、接口、函数和常量。

专业词解释

命名空间名称定义

非限定名称Unqualified name 名称中不包含命名空间分隔符的标识符,例如 Foo

限定名称Qualified name 名称中含有命名空间分隔符的标识符,例如 Foo\Bar

完全限定名称Fully qualified name 名称中包含命名空间分隔符,并以命名空间分隔符开始的标识符,例如 \Foo\Bar。 namespace\Foo 也是一个完全限定名称。

可以将 PHP命名空间与文件系统作一个简单的类比。

在文件系统中访问一个文件有三种方式:相对文件名形式如foo.txt。它会被解析为currentdirectory/foo.txt,其中 currentdirectory    表示当前目录。

因此如果当前目录是/home/foo,则该文件名被解析为/home/foo/foo.txt。

相对路径名形式如subdirectory/foo.txt。它会被解析为currentdirectory/subdirectory/foo.txt。

绝对路径名形式如/main/foo.txt。它会被解析为/main/foo.txt。

个人理解:

将命名空间完全等价为linux系统的文件路径

你当前命名空间是space.那么就相当于你在目录space下进行操作,你要使用这个空间下的如果space\test 的方法 fun(), 那么就是test\fun();系统会自动完善为space\test\func();

所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前:

定义子命名空间

  与目录和文件的关系很象,PHP命名空间也允许指定层次化的命名空间的名称。因此,命名空间的名字可以使用分层次的方式定义:eg :  namespace MyProject\Sub\Level;

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

方式1 方式

命名空间和动态语言特征

同理函数和常量

__NAMESPACE__常量

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

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

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

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

全局空间

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

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

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

参考:

PHP: 命名空间 - Manual

相关文章

  • Hbase 查询语句

    进入HBase数据库 HBase帮助命令: 命名空间 列出所有命名空间 新建命名空间 删除命名空间 该命名空间必须...

  • NDK开发:C++基础

    一、命名空间 standard:标准命名空间 命名空间类似于java中的包。 自定义命名空间 使用命名空间 ::为...

  • Chapter 18 Large-scale project t

    命名空间 inline命名空间 inline声明的命名空间, 可以无视本层命名空间, 而可以被直接使用. 用处: ...

  • C#随笔1

    1命名空间 语法 namespace 命名空间名称{若干个类型} ORnamespace 命名空间名称.子命名...

  • 07_Python函数进阶_全栈开发学习笔记

    # 1. 命名空间 ## 1.1 命名空间的种类 命名空间共有有三种 1) 内置命名空间 —— python解释器...

  • C++入门05 --命名空间,继承,访问权限,初始化列表

    命名空间 命名空间主要是用来解决命名冲突的; namespace xxxx { }:命名空间的定义; 利用::域运...

  • 命名空间 namespace

    /*命名空间:命名空间是一种封装事物的方法命名空间怎么声明?关键字: namespace 导入命名空间: use起...

  • chapter18_命名空间

    命令空间 每个命名空间都是一个作用域位于该命名空间之外的代码必须明确指出所用的名字属于哪个命名空间 命名空间可以是...

  • kubernetes-RBAC实操

    环境准备准备test的命名空间test命名空间下创建serviceaccounttest命名空间下创建rolete...

  • laravel控制器

    namespace命名空间 命名空间:命名空间是一种封装事物的方法。 命名空间用来解决在编写类库或应用程序时创建可...

网友评论

      本文标题:命名空间

      本文链接:https://www.haomeiwen.com/subject/alwwbftx.html