命名空间

author author     2022-09-09     726

关键词:

1.命名空间概述

PHP 5 >= 5.3.0, PHP 7)

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件 foo.txt 可以同时在目录/home/greg/home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。

在PHP中,命名空间用来解决在编写类库或应用程序时创建可重用的代码如类或函数时碰到的两类问题:

  1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
  2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。

2.定义命名空间

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

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

3.使用命名空间

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

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

PHP 命名空间中的元素使用同样的原理。例如,类名可以通过三种方式引用:

  1. 非限定名称,或不包含前缀的类名称,例如 $a=new foo();foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespacefoo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。详情参见 使用命名空间:后备全局函数名称/常量名称
  2. 限定名称,或包含前缀的名称,例如 $a = new subnamespacefoo();subnamespacefoo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespacesubnamespacefoo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespacefoo
  3. 完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new currentnamespacefoo();currentnamespacefoo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespacefoo

tcl学习之--命名空间

...解释器将全部的命令和全局变量分组管理。这些小组称为命名空间,一个命名空间中的命令和变量不会影响到还有一个命名空间。这些命名空间呈树形组织。一个命名空间的命令能够被还有一个命名空间引入。命名空间树的根就... 查看详情

tcl学习之--命名空间

...解释器将全部的命令和全局变量分组管理。这些小组称为命名空间,一个命名空间中的命令和变量不会影响到还有一个命名空间。这些命名空间呈树形组织。一个命名空间的命令能够被还有一个命名空间引入。命名空间树的根就... 查看详情

命名空间

命名空间:什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。虽然任意合法的PHP代码都可以包含在命名空间中,但只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。命名空间通过关键字namespace... 查看详情

命名空间的定义

命名空间是一个容器,这个容器主要是为了识别其下的类和函数。一旦定义了命名空间,它下面的代码就属于这个命名空间了,所以命名空间的定义要在代码的最开始行。对于同一个包来说,同一个命名空间或者子命名空间的代... 查看详情

命名空间

在使用有命名空间的资源时,调用的时候必须在资源名称前面加上命名空间的名称,在访问资源时,前置先进行了命名空间的声明,后面就不需要再次的引入了命名空间的操作类在使用时可以使用别名,取别名的关键字asnamespace... 查看详情

*args**kwargs函数的命名空间。

什么是命名空间?命名空间就是,我们给在内存中存放变量与值得对应关系的空间,叫做命名空间。命名空间一共分为三种:1,全局命名空间代码在运行开始,创建的存储,变量与值得关系,的空间叫做全局命名空间。2,局部... 查看详情

namespace命名空间

一、命名空间的定义namespace命名空间的名字{类/变量/函数/模板/其他命名空间};命名空间空间可以定义在全局作用域和其他命名空间中,但不能定义在函数或类的内部。 二、命名空间的作用域每一个命名空间都是一个作用域... 查看详情

处理命名空间中的命名空间模型(类)

】处理命名空间中的命名空间模型(类)【英文标题】:Handlingnamespacemodels(classes)innamespace【发布时间】:2011-08-1616:40:00【问题描述】:我正在使用RubyonRails3,我想在命名空间中处理模型(类)命名空间。也就是说,如果我有一... 查看详情

命名空间(代码片段)

 Python的命名空间是Python程序猿必须了解的内容,对Python命名空间的学习,将使我们在本质上掌握一些Python中的琐碎的规则。接下来我将分四部分揭示Python命名空间的本质:一、命名空间的定义;二、命名空间的查找顺序;三... 查看详情

函数的命名空间作用域

...=============函数进阶================================---------全局的命名空间----函数外部的1命名空间---------局部命名空间----函数内的内置的命名空间-----python内置的调用时命名空间的加载顺序python启动===>>内置的命名空间====>>加... 查看详情

命名空间

  命名空间:类似于文件夹;作用是为了归类和接口的  命名空间中只能写类、结构体、接口、枚举和委托  命名空间是可以重名的,相同名字的命名空间是同一个命名空间  关键字:namespace  namespaceA{classPerson{}namesp... 查看详情

大型程序的工具——命名空间(代码片段)

一、命名空间  命名空间为防止名字冲突提供了更加可控的机制。命名空间分割了全局命名空间,其中每个命名空间是一个作用域 1、命名空间定义  一个命名空间的定义包含两部分:首先是关键字namespace,随后是命名... 查看详情

框架命名空间

命名空间:相当于虚拟目录目的:是为了自动加载类初始命名空间:Library根命名空间: 第一部分:Library下面的所有文件夹 第二部分:应用程序模块名 TP框架下所有类都要写命名空间写命名空间怎么写: 从根开始写,写到该文... 查看详情

命名空间

默认情况下,所有常量、类和函数名都放在全局空间下命名空间通过关键字namespace来声明如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。在声明命名空间之前唯一合法的代码是用于定义源文件编码方式... 查看详情

命名空间

只有三种类型的代码受命名空间的影响,它们是:类,函数和常量。关键字 namespace如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间。特征 另外,与PHP其它的语言特征不同,同一个命名空间可以定义在多... 查看详情

函数进阶

 1、命名空间 命名空间就是存放变量名和变量值关系记录的一块内存空间, python中命名空间分为三种:全局命名空间、局部命名空间、内置命名空间。 三种命名空间的加载顺序:内置命名空间(程序运行前加载)-&g... 查看详情

如果没有定义命名空间,一个类会有啥命名空间

】如果没有定义命名空间,一个类会有啥命名空间【英文标题】:Whatnamespacewillaclasshaveifnonamespaceisdefined如果没有定义命名空间,一个类会有什么命名空间【发布时间】:2014-10-1822:25:50【问题描述】:在C#中,如果我创建一个没有... 查看详情

命名空间

1.命名空间,即将代码划分成不同空间,不同空间的类名相互独立,互不冲突。一个php文件中可以存在多个命名空间,第一个命名空间前不能有任何代码。内容空间声明后的代码便属于这个命名空间,例如:<?phpecho111;//由于name... 查看详情