2.1PHP语言的命名空间(Namespace)

1.命名空间声明

命名空间声明必须在文件中的顶部,在命名空间声明之前不可以有 PHP 代码、非 PHP 代码(例如:HTML、空白符等),除了declare 语言结构的 encoding 指令。

尽管任何有效的 PHP 代码都可以包含在命名空间体中,但受命名空间影响的只有这些元素:类(包括抽象类)、接口、trait、常量、函数。

此外,同一个命名空间可以在多个文件中声明,从而允许跨文件拆分命名空间中的元素。

注意:命名空间声明不支持嵌套命名空间声明,可以使用声明方式一中的有类似于目录的层次结构模拟嵌套命名空间声明。

1.1声明方式一

//无类似于目录的层次结构
namespace 命名空间名;

//命名空间体
//有类似于目录的层次结构
namespace MyProject\Sub\Level;

//命名空间体

1.2声明方式二

//同一个文件只有一个命名空间
namespace 命名空间名 {
    //命名空间体
}
//同一个文件有两个命名空间
namespace 命名空间名1 {
    //命名空间体
}

namespace 命名空间2 {
    //命名空间体
}
//同一个文件有一个命名空间和一个全局非命名空间(namespace关键字后无命名空间名称)
//注意:两个命名空间无先后顺序。
namespace 命名空间名1 {
    //命名空间体
}

namespace {
    //全局代码
}

2.use导入外部的元素到命名空间

可以使用 use 导入外部的命名空间、类、接口、trait、枚举、常量、函数等元素到命名空间。

可以使用 as 为导入的元素添加别名。

use 必须在文件的 最外层作用域(全局作用域) 或 命名空间声明中。

注意:use 后的名称必须是完全限定名称,因此可以省略开头的命名空间分隔符(\)。

//导入一个

//导入命名空间
//等同于use My\Full\NSname as NSname;
use My\Full\NSname;

//导入类
use ArrayObject;
use My\Full\Classname as Another;

//导入常量
use const My\Full\CONSTANT;

//导入函数
use function My\Full\functionName;
use function My\Full\functionName as func;
//导入非同一个命名空间的多个
use My\Full\Classname as Another, My\Full\NSname;
//导入同一个命名空间的多个
use some\namespace\ClassA;
use some\namespace\ClassB;
use some\namespace\ClassC as C;

use function some\namespace\fn_a;
use function some\namespace\fn_b;
use function some\namespace\fn_c;

use const some\namespace\ConstA;
use const some\namespace\ConstB;
use const some\namespace\ConstC;

//同等代码
use some\namespace\{ClassA, ClassB, ClassC as C};
use function some\namespace\{fn_a, fn_b, fn_c};
use const some\namespace\{ConstA, ConstB, ConstC};

3.元素名称解析规则

__NAMESPACE__ 魔术常量 和 namespace 关键字 指向其所在的当前命名空间,类似于类的 __CLASS__ 魔术常量 和 self 关键字。

注意:可变变量名、可变函数名、可变类名的表达式内的名称必须是完全限定名称,因此可以省略开头的命名空间分隔符(\)。

元素名称元素解析规则
完全限定名称(Fully qualified name):名称中包含命名空间分隔符(\),并以命名空间分隔符(\)开头,例如:\Foo\Bar类似于文件目录系统的绝对路径。\ 类似于文件目录系统“根”目录,所以可称为“根”命名空间。
限定名称(Qualified name):名称中包含命名空间分隔符(\),但不以命名空间分隔符(\)开头,例如:Foo\Baruse导入的元素->当前命名空间中的元素。
非限定名称(Unqualified name):名称中不包含命名空间分隔符(\),例如:Foo如果是类,use导入的类->当前命名空间中的类。
如果是常量和函数,use导入的常量和函数->当前命名空间中的常量和函数->全局命名空间中的常量和函数。
相对名称(Relative name):名称以 namespace 关键字开头, 例如:namespace\Foo\Bar类似于文件目录系统的相对路径。namespace 关键字指向其所在的当前命名空间。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/php/phplang/28885.html

(0)
上一篇 2023年6月11日
下一篇 2023年7月2日

相关推荐

  • 2.4PHP类型之类(Class)

    1.类声明 2.可变(Variable)类名 类的名称可以通过返回值为字符串类型的表达式动态指定。 3.继承 一个子类可以继承一个父类的 静态属性、实例属性、常量、静态方法、实例方法、构造函数、析构函数。 一个子类不可以继承自多个父类,一个子类只可以继承自一个父类,但可以多个子类继承自同一个父类。 4.覆盖(Overr…

    PHP语言教程 2023年7月4日
    0460
  • 1.1PHP语言的标记(Tag)

    当解析一个文件时,PHP 会寻找起始和结束标记,也就是 <?php 和 ?>,而任何起始和结束标记之外的部分不会被 PHP 解析器处理,而是会被简单地原样输出。 例外地是当这部分处于条件语句中间时,此时 PHP 解释器会根据条件判断来决定哪些输出,哪些跳过。 以下示例中 PHP 将跳过条件语句未达成的段落,即使该…

    PHP语言教程 2023年6月1日
    0140
  • 2.3PHP类型之数组(Array)

    1.索引数组 2.关联数组 3.混合数组 键(key) 为可选项。如果未指定,PHP 将自动使用之前用过的所有的 int 键中最大的键加上 1 作为新的键。 4.多维数组 数组的元素还可以是其它数组,这称之为多维数组。 5.访问数组 6.数组长度

    PHP语言教程 2023年7月3日
    0260

发表回复

登录后才能评论