开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段:命名空间引入】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/713/detail/12727
命名空间引入
内容简介:
一、命名空间引入概念
二、空间元素引入
三、别名使用
四、示例
五、小结
一、概念
1.命名空间引入:
是将另外一个空间的元素引入到当前空间来,当作当前空间的元素访问
空间元素引入可以减少复杂的完全限定名称访问,取而代之的是非限定名称访问
可以快速的实现将当前需要使用的空间元素引入到当前文件
空间引入语法:use关键字
//元素关键字:默认是类,可以有 function (函数)和 const (常量)
Use[元素关键字] [\]空间名\元素名;#空间名是一级空间(全局空间之下)
引入过程可能会出现冲突问题,命名空间重名后,可以使用别名
2.别名:
引入的元素与当前空间已有元素重名或者想换成其他合适的名字
//使用别名后,原来的名字在当前那就不可用,只能使用别名
Use [元素关键字]空间名\元素名 as 别名;
3.空间元素引入:
可以一次性引入一个空间的所有元素,或者某个空间指定类型的多个元素(批量引入)
//空间引入是将被引入的空间的最后一级空间,当作当前空间的子空间
//类引入不需要 class 关键字(默认就是 class)
具体语法如下:
# 引入多个元素
Use [元素关键字//例如类 class,class省略]空间名\元素名1[as 别名],空间名\元素名2...;
# 空间名可以不同,但是元素类型必须相同
#引入空间(全部元素)
Use 空间名; #将当前引入的空间(最后一级)当作当前所在空间的子空间 //当前在文件夹下,引入了一个软件文件夹,如果在软件文件夹下创建了一个面向对象,那么面向对象就是子文件夹,如图:
二、示例
1.空间引入方式:use 关键字
Namespace space;
Class man{}
Namespace space1
# 引入空间元素
Use space\man
New man();
注意:use 进行空间包含的时候,默认是从全局空间开始构建空间路径的(不是自己空间的相对路径),所以上述代码等价于以下代码
Namespace space
Class man{}
Namespace space1;
#引入空间元素
Use\space\man;
举例:
在web下新建一个 300namespace_use.php
<?php
#空间引入
Namespace space;
Function dispaly(){
Each)_NAMSPACE_,’<br>’;
}
Class man{}
#另外空间(另外文件)
Namespace space1;
#直接使用:完全限定名称
$m1=new\space\man();
Var_dump($m1);
# 元素引入(类)
Use space\man;
Use\space\man;
New man();
2.空间引入的元素默认是类,如果要引入其他元素,就必须使用相应关键字:function(函数)和const(常量)
Namespace space
Function display(){}
Class man{}
Const PI=3.14;
# 引入函数
Use function1 space\display
Dispaly();
结果如下:
#引入常量
Use const space\PI;
Each PI;
结果如下:
以上是元素不同的引入方式,输入use对应的class,元素引入针对类。
3.如果被引入的元素在当前空间已经存在,则会出现重名,解决方案是使用别名as alias
Namespace space;
Function dispaly(){}
Class man{}
Const PI = 3.14
Namespace space1;
Class man{}
#引入空间元素
Use space\man ;
#错误:当前空间已经存在man
Use space\man as m;
Use function space\dispaly as dis;
Use const space\PI as D;
举例:Const PI = 3;
# 引入常量
# use const space\PI;
# 元素别名
Use const space\PI as P;
Each pi;
Each p;
//访问被引入常量
任何内容都可以别名:类、方法、常量 (原本的名称不可再用)
4.一旦引入的时候使用了别名,那么在使用的时候就直接通过别名使用
Namespace space;
Function dispaly(){}
Class man{}
Namespace space1;
Class man{}
#引入空间元素
Use space\man as m;
New m();
#引用别名
5.如果一个空间有多个元素要引入。那么可以进行一次引入多个,使用逗号,分隔即可(前提属于同类)
Namespace space;
Function dispaly(){}
Class man{}
Class woman{}
Namespace space1;
Class man{}
# 一次引入多个
Use space\man as m,space\woman;
# 虽然可以批量引入(不同空间也行),但是每个元素都需要带上空间
# 引入了一个 man 类别名为 m ,woman 类没有定义别名
举例:
Class woman{}
Class ladyboy{}
//这里使用了两个元素,非一个
# 批量引入元素
Use space\woman as W,space\ladyboy as L;
new W();
new L();
6.如果说确定一个空间里的所有元素都需要引入进来,也可以直接引入空间
Namespace space;
Class man{}
Namespace space1;
# 引入空间
Use space;
举例:
Namespace space1;
Const PI = 3;
#引入空间
Use space;
# 相当于将引入的空间的末级空间当作当前空间的子空间
Namespace space1\space;
# 因为引入的是当作子空间:所以需要使用限定名称访问
# Display(); # 错误:空间引入不是将空间元素全部纳入到当前空间里
# 正确访问
Space\dispaly();
//限定名称访问
7.如果直接进行空间引入,非限定名称的访问的只会是当前自己空间而非引入的空间,要访问引入空间,需要使用限定名称访问:即引入的空间最后一级空间名字+元素(引入空间当作空间的子空间)
Namespace space\space1\space2;
Class man{}
Namespace space3;
Class man{}
# 引入空间
Use space\space1\space2;
New man();
# 访问的是space3\man
New space2\man();
# 使用引入空间的最后一级空间访问
// 这种方式应用不多,较为复杂,需要用到限定名称,一般引入元素居多,引入空间居少
三、小结
1.空间引入是解决访问时的麻烦:有完全限定名称(限定名称)变成非限定名称访问
2.空间元素都可以引入,但是引入方式有区别
(1)类直接引入
(2)函数需要在use之后跟关键词 function
(3)常量需要在use之后跟关键词 const
3.空间引入过程中如果出现重名,需要使用别名来处理,引入后在空间里可以直接访问别名
4.可以一次性引入多个空间内的多个元素
(类型相同:每个元素必须在前面加上空间路径)
5.如果必要的情况下,也可以直接使用空格引入
但是要注意引入空间的元素不允许直接使用非限定名称访问,必须使用被引入空间的最后一级空间+元素访问(不常使用,引入方便但是使用不方便)