命名空间引入|学习笔记

简介: 快速学习命名空间引入,理解空间引入的逻辑和优势,掌握空间引入

开发者学堂课程【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 空间名;   #将当前引入的空间(最后一级)当作当前所在空间的子空间 //当前在文件夹下,引入了一个软件文件夹,如果在软件文件夹下创建了一个面向对象,那么面向对象就是子文件夹,如图:

image.png 


二、示例

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;

image.png# 引入函数

Use function1 space\display

Dispaly();

结果如下:

#引入常量

Use const space\PI;

Each PI;

结果如下:

image.png以上是元素不同的引入方式,输入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.如果必要的情况下,也可以直接使用空格引入

但是要注意引入空间的元素不允许直接使用非限定名称访问,必须使用被引入空间的最后一级空间+元素访问(不常使用,引入方便但是使用不方便)

相关文章
|
新零售 人工智能
阿里巴巴联合汉仪重磅推出五款人工智能字体:汉仪天真体、英雄体等
众所周知传统做字的人力成本非常之高,如果全靠人类设计师来完成,一套标准字库从设计到完成需要一年多的时间。
13360 0
|
JavaScript 前端开发 应用服务中间件
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
Vue项目如何进行部署?是否有遇到部署服务器后刷新404问题?
346 0
|
10月前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
在MySQL中,为了提高检索效率和稳定性,采用了B+树作为索引的数据结构。相比二叉树或B树,B+树的非叶子节点仅存储key和指针,使得每页能容纳更多key,树的层级更浅,检索更快;所有数据集中在叶子节点,形成双向链表,利于区间查询。以16KB页为例,三层B+树可容纳约2190万条数据。
243 1
|
数据挖掘 UED
ChatGPT数据分析——探索性分析
ChatGPT数据分析——探索性分析
159 1
ly~
|
存储 安全 大数据
数据库的发展趋势是什么?
数据库发展趋势涵盖云化、智能化、分布式及多模型融合等多个方面。云数据库和DBaaS模式使企业能快速调整资源,降低成本;AI和机器学习技术推动智能运维、查询优化等功能;分布式架构和并行计算则提升了数据处理能力和速度。此外,多模型数据库满足了多样化的数据处理需求,而数据安全技术和隐私保护也在不断加强。数据库与大数据、AI、区块链等新兴技术的融合将进一步提升其功能与安全性。
ly~
910 1
|
存储 C++ Python
[oeasy]python037_ print函数参数_sep分隔符_separator
本文介绍了Python中`print`函数的`sep`参数,即分隔符。通过回顾上文内容,解释了类型与`type`的概念,并强调了参数类型的重要性。文章详细探讨了`print`函数如何使用`sep`参数来分隔输出值,默认分隔符为空格(序号32)。还讨论了如何修改分隔符为其他字符,如冒号,并解释了为何反斜杠需要使用双反斜杠表示。最后,文章追溯了`sep`名称的由来,以及相关词汇的历史背景,如盎格鲁-萨克逊人的武器和语言。
356 0
|
设计模式 Java
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
文章提供了一份常用设计模式的全面介绍,包括创建型模式、结构型模式和行为型模式。每种设计模式都有详细的概念讲解、案例说明、代码实例以及运行截图。作者通过这些模式的介绍,旨在帮助读者更好地理解源码、编写更优雅的代码,并进行系统重构。同时,文章还提供了GitHub上的源码地址,方便读者直接访问和学习。
常用设计模式介绍~~~ Java实现 【概念+案例+代码】
|
安全 物联网 API
API的科普
在当今这个数字化时代,信息如同血液般在无数个系统、应用和设备之间流淌,而这一切高效、无缝的交互背后,离不开一个至关重要的技术组件——API(Application Programming Interface,应用程序编程接口)。API作为数字世界的桥梁,不仅连接了不同的软件系统,还推动了数据共享、业务自动化以及创新服务的不断涌现。本文将深入探讨API的定义、作用、发展历程、关键技术、应用场景以及未来趋势,旨在揭示API在数字化转型中的核心价值和无限潜力。
1647 0
|
监控 BI 数据安全/隐私保护
ERP系统中的成本核算与管理会计解析
【7月更文挑战第25天】 ERP系统中的成本核算与管理会计解析
966 4
|
数据挖掘 API 开发者
​Email API有哪些,最好的3个API接口有哪些
Email API如SendGrid、Mailgun和AOKSend是企业自动化邮件通信的关键工具。它们提供邮件发送、接收和管理功能,提升效率,优化客户体验。SendGrid以其高可靠性、强大分析和易于集成备受青睐;Mailgun以灵活性和高发送率著称;而AOKSend则以其高效、详细分析和易用性脱颖而出。通过使用这些API,企业能实现定制化邮件服务,跟踪性能,提升邮件营销效果。