全局空间|学习笔记

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

开发者学堂课程【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)系统类必须使用全局空间访问: \类名。

相关文章
|
5月前
|
C语言 C++
程序的内存模型\全局区
程序的内存模型\全局区
30 2
|
12月前
|
存储 关系型数据库 MySQL
空闲空间管理和文件系统结构的优化策略
对于有科班背景的读者,可以跳过本系列文章。这些文章的主要目的是通过简单易懂的汇总,帮助非科班出身的读者理解底层知识,进一步了解为什么在面试中会涉及这些底层问题。否则,某些概念将始终无法理解。这些计算机基础文章将为你打通知识的任督二脉,祝你在编程领域中取得成功!
空闲空间管理和文件系统结构的优化策略
|
编译器 Linux C语言
使用new/delete动态管理内存【C/C++内存分布】
使用new/delete动态管理内存【C/C++内存分布】
53 0
|
存储 算法 索引
内存管理(三)——非连续分配管理方式(分页)
内存管理(三)——非连续分配管理方式(分页)
569 0
|
存储 算法 程序员
内存管理(二)——连续分配管理方式
内存管理(二)——连续分配管理方式
392 0
|
存储 缓存 算法
《深入理解Java虚拟机》读书笔记(二)--对象的创建与空间分配及定位
《深入理解Java虚拟机》读书笔记(二)--对象的创建与空间分配及定位
112 0
|
PHP 开发者
命名空间子空间|学习笔记
快速学习命名空间子空间,命名空间就类似文件夹,就实现了一个内存的划分,命名空间也可以像文件夹一样多层,就是我们的子空间,理解子空间的概念,掌握子空间的创建规范以及怎么去创建子空间。
命名空间子空间|学习笔记
|
Kubernetes 网络协议 API
关于K8s中 pod 资源使用全局、局部限制 的一些笔记
写在前面 分享一些 K8s 中 LimitRange 的笔记 博文内容涉及: LimitRange 简单介绍 LimitRange 资源对象创建使用 准入检查和资源约束的一些 Demo 理解不足小伙伴帮忙指正
460 0