php命名空间学习

PHP命名空间在手册上是这么说的

广义上说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。

为啥要用到命名空间,因为你在编写程序的时候会遇到以下问题

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

2、为很长的标识符创建一个别名的名称,提高源代码的可读性

所有的代码都可以被包含在命名空间中,但是主要这些会受到命名空间的影响:类(抽线类和traits)、接口、函数和常量

除了一个关键字(declare)之外,其他的关键字函数等都必须要在命名空间之后申明。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。

也可以在同一个文件中定义多个命名空间。在同一个文件中定义多个命名空间有两种语法形式。

一个用;另一个是{}。一个文件可以有多个命名空间。

除了declare关键字之外其他的都必须在命名空间内,否则出错,如果要定义全局变量可以直接使用

namespace  {

扫描二维码关注公众号,回复: 11093001 查看本文章

全局变量函数等

}

命名空间中的元素使用有三种方式

1、非限定命名,或不包括前缀的类名称 如$a=new foo(); 或 foo::staticmethod();。如果当前命名空间是currentnamespace,foo将被解析为currentnamespace\foo。如果foo是全局的,那么就会被解析为foo。

2、限定名称、或者包含前缀的名称$a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo

3、完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或   \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo

注意因为在动态的类名称、函数名称或常量名称中,必须使用完全限定名称

PHP支持两种抽象的访问当前命名空间内部元素的方法,__NAMESPACE__ 魔术常量和namespace关键字。

常量__NAMESPACE__的值是包含当前命名空间名称的字符串。在全局的,不包括在任何命名空间中的代码,它包含一个空的字符串。

所有支持命名空间的PHP版本支持三种别名或导入方式:为类名称使用别名、为接口使用别名或为命名空间名称使用别名。

命名空间名称定义

非限定名称Unqualified name

名称中不包含命名空间分隔符的标识符,例如 Foo

限定名称Qualified name

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

完全限定名称Fully qualified name

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

发布了20 篇原创文章 · 获赞 21 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/jachinFang/article/details/105703449