php中globals,PHP中$GLOBALS和global的区别
在PHP中经常遇到$GLOBALS和global来定义和访问全局变量,那么在什么地方该用$GLOBALS,而什么地方该用global呢?这就需要我们清除了解$GLOBALS和global的区别,我也谈谈PHP中$GLOBALS和global的不同,要真正弄懂它们的区别和共同点请仔细看这篇文章。
$GLOBALS和global的本质不同
$GLOBALS和global不光有区别,还有本质不同。
$GLOBALS是一个数组,它是一个包含了全部变量的全局组合数组。而global是一个PHP关键字,它可以将一个变量的作用域变成全局的。在PHP官方手册中有这句话:
The global keyword is used to manipulate variable scope, and there is also the concept of super globals in PHP, which are special variables with a global scope.
也就是说,global声明一个变量,这个变量就具有全局作用域。比如在函数内部要访问函数外部定义的一个变量,就要用global关键字在函数内部声明这个变量。或者在函数内部声明了一个变量是global,那么在函数外部通过global声明这个变量,也就可以全局访问了。
$GLOBALS使用范例
$GLOBALS使用示例1:
function test() {
$foo = "local variable";
echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";
echo '$foo in current scope: ' . $foo . "\n";
}
$foo = "Example content";
test();
?>
在该例中,有两个$foo,一个在函数内,一个在函数外,它们的作用域不同,一个作用域是函数内的,一个作用域是全局的,这个全局指的是在这个php文件中,或者被include或require进的php文件中。我们探讨$GLOBALS和global的区别的时候,重点就是关注变量的作用域。
这个程序的输出结果是:
$foo in global scope: Example content
$foo in current scope: local variable
第一个结果是在函数内部通过$GLOBALS访问全局变量的那个$foo,可以获取并且输出。第二个结果是输出局部变量也就是函数内定义的$foo.
$GLOBALS使用示例2:
function errfunc() {
echo $PHP_SELF;
}
errfunc();
?>
本例中声明了一个变量$PHP_SELF,它的作用域是这个函数内,而直接echo这个变量会出错,因为undefined,没有定义。在PHP中,PHP_SELF这个名字应该很熟悉吧,它是自动生成的一个全局变量,表示当前网页地址。既然是自动生成的全局变量,也就可以通过$GLOBALS来访问了,如下例:
function myfunc() {
echo $GLOBALS["PHP_SELF"];
}
myfunc();
这样通过$GLOBALS访问的PHP_SELF就是全局变量中的,而这个变量很特殊,是系统自动生成的。
global使用示例
global使用示例1
$name='Steve';
function myname(){
global $name;
echo $name;
}
myname();
?>
$name='Steve';
function myname(){
global $name;
echo $name;
}
myname();
?>
这个简单的例子就是在函数内部访问外部全局变量$name然后输出它,如果不用global就会出错。
global使用示例2
function myfunc() {
global $PHP_SELF;
echo $PHP_SELF;
}
myfunc();
?>
function myfunc() {
global $PHP_SELF;
echo $PHP_SELF;
}
myfunc();
?>
和上面的例子作用一样,输出PHP_SELF全局变量。这里用的global,把一个变量作用域变成全局的,这就是global和$GLOBALS的共同点。这里global声明了一个变量$PHP_SELF,就创建了外部变量$PHP_SELF的同名引用或指针,从而访问全局变量,这句话又是讲的global和$GLOBALS的不同点。
通过下面的例子就可以看出global和$GLOBALS的区别:
$var1=1;
$var2=2;
function test(){
global $var1,$var2;
$var2=&$var1;
}
test();
echo $var2;
1
2
3
4
5
6
7
8
$var1=1;
$var2=2;
function test(){
global $var1,$var2;
$var2=&$var1;
}
test();
echo $var2;
结果是:2
为什么结果是2?首先通过global将外部变量$var1,$var2变成全局变量,然后$var2引用$var1,很多人就理解为$var2的值和$var1一样了,但是echo $var2是在函数外部,global是在函数内部创建了外部$var2的同名引用,并不是外部$var2本身,所以函数内部的操作并没有改变外部变量$var2的值。
如果用$GLOBALS,如下例那就改变了$var2的值:
$var1=1;
$var2=2;
function test(){
$GLOBALS['var2']=&$GLOBALS['var1'];
}
test();
echo $var2;
$var1=1;
$var2=2;
function test(){
$GLOBALS['var2']=&$GLOBALS['var1'];
}
test();
echo $var2;
结果是1。因为$GLOBALS变量是自己本身。
再如这个例子证明$GLOBALS[‘var’]是自己本身。
$var1=1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
1
2
3
4
5
6
$var1=1;
function test(){
unset($GLOBALS['var1']);
}
test();
echo $var1;
结果是空的。test函数unset把外部全局变量var1卸载了
php中globals,PHP中$GLOBALS和global的区别相关推荐
- PHP学习:PHP超全局变量(Superglobal)$GLOBALS的介绍以及和global的区别
PHP超全局变量有很多,如下的都属于超全局变量Superglobal $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUE ...
- globle php,php中global与$GLOBAL的区别分析
大多数的人都会以为global和$GLOBALS[]只是在写法上面有所不同,但是实际上并不是这样的,下面我们就来看一下它们之间究竟有何区别. 根据官方的解释是 $GLOBALS['var'] 是外部的 ...
- 【php】php中global与$GLOBAL['']的区别
+++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GL ...
- [ASP.NET]ASP.NET中的Inherits、CodeFile、CodeBehind的区别详解及OWIN及IDENTITY
篇一 : ASP.NET中的Inherits.CodeFile.CodeBehind的区别详解 Inherits.CodeFile.CodeBehind 在 ASP.NET 中使用代码隐藏方法来设计W ...
- PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别)
PHP如何进行错误与异常处理(PHP7中的异常处理和之前版本异常处理的区别) 一.总结 一句话总结: throwable接口+Error类 在PHP7更新中有一条:更多的Error变为可捕获的Exce ...
- 媒体查询中“屏幕”和“仅屏幕”之间有什么区别?
本文翻译自:What is the difference between "screen" and "only screen" in media queries ...
- Java Persistence API中的FetchType LAZY和EAGER之间的区别?
我是Java Persistence API和Hibernate的新手. Java Persistence API中的FetchType.LAZY和FetchType.EAGER什么区别? #1楼 我 ...
- js数组中forEach/some/every/map/filter/reduce的区别
2019独角兽企业重金招聘Python工程师标准>>> // js数组中forEach/some/every/map/filter/reduce的区别// 1. foreach:就是 ...
- python中remove函数是什么意思,python中pop函数和remove函数有什么区别
python中pop函数和remove函数有什么区别 发布时间:2020-12-10 09:36:18 来源:亿速云 阅读:80 作者:小新 小编给大家分享一下python中pop函数和remove函 ...
最新文章
- 使用Docker-Docker for Web Developers(2)
- 页面布局 - flex弹性布局
- 由于找不到appvisvsubsystems32.dll_去固始张街逛一逛,以后可能看不到了......
- Android stadio 电脑连上手机可以识别,但是连不上Android stadio
- Python正则表达式-2
- 信息系统项目管理师-人力资源管理知识点
- php 文件位置获取
- Junit_@Before@After
- id选择器、标签选择器、类选择器、交集选择器、并集选择器
- 新年继续发红包,1500元!
- C#调用C++类(以COM组件的形式)
- 【Pytorch神经网络理论篇】 31 图片分类模型:ResNet模型+DenseNet模型+EffcientNet模型
- 数据结构之内部排序算法总结笔记
- ios 短信验证码自动填充时总是被复制两遍
- 【学习笔记】函数高级使用技巧:建立函数队列
- 【图像重建】基于matlab ASTRA算法图像重建【含Matlab源码 090期】
- AWS EMR 上 Spark 任务 Container killed Exit code 137 错误
- 设置WDS桥接成功,上不了网怎么办?路由器WDS无线桥接设置正确方法
- 数据库—Mysql相关
- 用 Telegram bot 搭个消息提醒服务
热门文章
- ubuntu20.04(linux)系统:报错下列软件包有未满足的依赖关系: deepin-libwine:i386 : 依赖: libncurses5:i386 但是它将不会被安装
- L1-077 大笨钟的心情(分数 15)
- Easyui 表格中复选框设置单选
- 个人下载mysql什么版本_Mysql各个版本区别及官网下载
- 容器镜像[容器培训专题]
- MVG学习笔记(4) --三视图几何
- 【深入设计模式】迭代器模式模式—什么是迭代器模式?
- 在OpenCV里图像数据与一维数组转换
- Java之下载相关网页到本地
- 十大经典零食,你吃过几样?