开发者学堂课程【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();
#完全限定名称访问
\display();
若想定义 space,必须在全局空间之后再划分,因为全局空间掌控所有,只能在全局空间划分小区域。
4、一旦命名空间出现,那么空间元素(类、常量和函数)的访问就被限定在空间内,如果使用非限定名称访问,那么系统会以下解析逻辑(限定名称或者完全限定名称是直接按路径准确找)。
(1)首先一定是在自己空间内查找。
(2)如果找不到元素,不同空间元素的处理不同。
●系统常量、系统函数如果找不到,会自动升级去全局空间找(也就是能找到),前提是 space 没有才会升级去全局空间找。
function display(){
echo__NANESPACE__,'全局空间’
}
# 非限定名称访问:访问当前空间
display( );
#完全限定名称访问
\display( );
#访问系统函数
echo count([1,2,3]);
#系统函数和常量,系统会自动升级到全局空间找
echo\count([1,2,3]);
●系统类,系统是不会自动去全局空间找的(报错, 提示当前所属空间内元素找不到)。
#访问系统类
new stdclass();
#错误:系统类,系统不会升级去全局空间找
正确访问方式是 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(;
(虽然包含的文件有空间,但是不影响包含之后的后序代码的非限定名称访问)
如果想要访问被包含文件里的元素(带空间);要根据被包含文件的空间形式来实现。
如果被包含文件是全局空间,那么使用完全限定名称访问。
使用 \display();
如果是别的空间也可以使用完全限定名称来访问,总之,完全限定名称可以解决任何访问的问题,只要存在,只要空间路径正确就一定能访问到。
三:小结
1、全局空间就是没有使用 namespace 定义空间的空间(所有空间本质都是在全局空间下划分)。
2、全局空间的元素访问使用完全限定名称访问。
3、系统内置的函数,常量和类都属于全局空间。(涉及到全局空间被包含到子空间里)
(1)系统函数、常量,在空间内访问的时候系统会自动在自己空间找,如果找不到会去全局空间。
(2)系统类必须使用全局空间访问: \类名。