全局空间|学习笔记

简介: 快速学习全局空间,了解全局空间的概念,掌握全局空间与其他命名空间的关系以及合作模式。

开发者学堂课程【PHP 进阶教程-由浅入深掌握面向对象开发-第三阶段全局空间】学习笔记,与课程紧密联系,让用户快速学习知识。  

课程地址:https://developer.aliyun.com/learning/course/713/detail/12725


全局空间

 

内容简介:

一:全局空间概念

二:全局空间示例

三:小结

 

一:全局空间概念

全局空间即空间元素在没有定义空间,没有声明空间的情况下所属的空间,也是所有定义的空间的父级,即顶级空间。

l 所有空间都是从全局空间分离出来的。

l 所有不指定空间的元素本质都属于全局空间。

l 全局空间与其他空间存在空间约束关系,在进行文件包含时需要注意到空间关系。

 

二:全局空间示例

1、没有指定空间的元素所属的空间属于全局空间

#不定义空间

function  display(){

echo__ NANESPACE__,' <br/>’;

}

2、所有的空间本质都是在全局空间下的划分

#定义空间

namespace space ;

function diasplay( ){

echo__NAMESPACE__,’<br/>’;

}

# space 空间属于从全局空间里划分出一小部分用于 space空间管理

3、全局空间元素的访问:使用完全限定名称访问。

<?php

#全局空间

function  display(){

echo__NANESPACE__,'全局空间’

}

# 非限定名称访问:访问当前空间

display();

image.png#完全限定名称访问

\display();

image.png若想定义 space,必须在全局空间之后再划分,因为全局空间掌控所有,只能在全局空间划分小区域。

4、一旦命名空间出现,那么空间元素(类、常量和函数)的访问就被限定在空间内,如果使用非限定名称访问,那么系统会以下解析逻辑(限定名称或者完全限定名称是直接按路径准确找)。

(1)首先一定是在自己空间内查找。

(2)如果找不到元素,不同空间元素的处理不同。

●系统常量、系统函数如果找不到,会自动升级去全局空间找(也就是能找到),前提是 space 没有才会升级去全局空间找。

function  display(){

echo__NANESPACE__,'全局空间’

}

# 非限定名称访问:访问当前空间

display( );

#完全限定名称访问

\display( );

#访问系统函数

echo count([1,2,3]);   #系统函数和常量,系统会自动升级到全局空间找

echo\count([1,2,3]);

image.png●系统类,系统是不会自动去全局空间找的(报错, 提示当前所属空间内元素找不到)。

#访问系统类

new stdclass();  #错误:系统类,系统不会升级去全局空间找

image.png正确访问方式是 new stdclass(); 改为 new \stdclass();

要访问系统类,就必须明确指定它在哪可以找到,别指望系统会自动跳过空间去别的地方找。访问这种系统类一般用的是无安全限定访问方式,从根目录去找,自己指定路径来实现访问。

5、同样,如果一个文件有空间,包含了一个没有空间的文件(指全局空间的文件),那么要访问文件中的内容,需要使用全局空间。

#无空间文件:nospace.php

function display(){     #属于全局空间

echo__FUNCTION__;

}

#有空间文件

namespace space();

function display(){

echo’space;

}

#包含无空间文件

Include_once’nospace.php’

#访问元素

display();  #访问的是space空间下的display函数

\display(); #正确:访问全局空间的display函数

具体操作如下:

# 包含全局空间文件 (没空间)

Include  ' 28namespace_global.php

display(;

image.png 

(虽然包含的文件有空间,但是不影响包含之后的后序代码的非限定名称访问)

如果想要访问被包含文件里的元素(带空间);要根据被包含文件的空间形式来实现。

如果被包含文件是全局空间,那么使用完全限定名称访问。

使用 \display();

如果是别的空间也可以使用完全限定名称来访问,总之,完全限定名称可以解决任何访问的问题,只要存在,只要空间路径正确就一定能访问到。

 

三:小结

1、全局空间就是没有使用 namespace 定义空间的空间(所有空间本质都是在全局空间下划分)。

2、全局空间的元素访问使用完全限定名称访问。

3、系统内置的函数,常量和类都属于全局空间。(涉及到全局空间被包含到子空间里)

(1)系统函数、常量,在空间内访问的时候系统会自动在自己空间找,如果找不到会去全局空间。

(2)系统类必须使用全局空间访问: \类名。

相关文章
|
7月前
|
机器学习/深度学习 并行计算 PyTorch
Windows下CUDA+pytorch安装
以下是关于在Windows下安装CUDA和PyTorch的简要介绍及参考链接:
389 0
Windows下CUDA+pytorch安装
阿里云app备案服务号在哪看
【10月更文挑战第11天】阿里云app备案服务号在哪看
472 1
|
12月前
|
存储 JavaScript 前端开发
什么是循环引用现象呢
【10月更文挑战第13天】什么是循环引用现象呢
283 0
|
传感器 安全 Go
程序与技术分享:3D打印机如何添加自动调平功能
程序与技术分享:3D打印机如何添加自动调平功能
433 0
|
开发工具 数据库 Docker
Docker----对已经存在的docker如何修改时区
Docker----对已经存在的docker如何修改时区
1369 0
|
存储 缓存 JavaScript
浏览器禁止缓存讲解
浏览器禁止缓存讲解
619 0
浏览器禁止缓存讲解
|
XML JSON 数据可视化
后端适用,Apifox接口文档设计和调试教程【工具篇】
对后端研发人员来说,Swagger+Postman 是接口设计和调试的必备工具,这两个工具都非常出色, 但不同系统间项目数据不互通,在变更、维护和协同上比较低效,另外是封装程度较低,使用上流程较为繁琐。
后端适用,Apifox接口文档设计和调试教程【工具篇】
|
开发框架 自然语言处理 数据可视化
NextArch 基金会旗下微服务标准化方案已开源:支持不同开发语言和技术框架
今年,腾讯、字节跳动、快手、BIGO、好未来、七牛云、中国移动、蓝色光标等多达 10 家企业和 go-zero/CloudWeGo/GoFrame/TARS 开源社区的技术专家,在 Linux 下一代架构基金会下成立了微服务技术组 SIG(Special Interest Group),共同探讨微服务治理标准化的解决方案,并向 NextArch 基金会提交了首个落地方案。
388 0
NextArch 基金会旗下微服务标准化方案已开源:支持不同开发语言和技术框架