PHP中超全局变量$GLOBALS和global的区别

本篇文章分享一下关于PHP中的超全局变量$GLOBALS和global的区别。

一、超全局变量$GLOBALS
 
PHP超全局变量有很多,如下的都属于超全局变量(Superglobal):
 
$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。
 
官方说明:

$GLOBALS — 引用全局作用域中可用的全部变量。

一个包含了全部变量的全局组合数组。变量的名字就是数组的键。

即出现过的全局变量,就可以通过$GLOBALS这个数组取得。

PHP生命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的。

$foo="Example content";
test();
function test(){
    $foo="local variable";
    echo '$foo in current scope: '.$foo."<br>";
    echo '$foo in global scope: '.$GLOBALS["foo"]."<br>";
}

如上的例子,要访问外部的$foo必须使用 $GLOBALS 数组。对于通过include文件进来的外部全局变量也适用。
 
php中global也有这样的功能,它和$GLOBALS的区别在于:

global在函数产生一个指向函数外部变量的别名变量,而不是真正的函数外部变量。

$GLOBALS[]确确实实调用是外部的变量,函数内外会始终保持一致。
 
对于类中的成员变量,类中函数必须使用$this->的方式访问,不能用$GLOBALS方式:
 
global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件。

二、实例讲解

function t1(){
    global $var1,$var2;
    $var2=&$var1;
}
function t2(){
    $GLOBALS['var3']=&$GLOBALS['var1'];
}
$var1=5;
$var2=$var3=0;
t1();
print $var2."\n";
t2();
print $var3."\n";

执行结果为:

0
5

为什么不是2个5而是1个0和1个5呢?再修改一下例子:

function t1(){
    global $var1;
    $var1=2;
    unset($var1);
}
function t2(){
    $GLOBALS['var1']=3;
    unset($GLOBALS['var1']);
}
$var1=1;
t1();
print $var1."\n";
t2();
print $var1."\n";

执行结果只输入一个2;

1、$GLOBALS是由所有已定义全局变量自动形成的数组。变量名就是该数组的索引。即$GLOBALS['var1']与函数外部的变量$var1是同一个变量,所以将$GLOBALS['var1'] 删除后,该变量已不存在,所有无法输出了。

注:$GLOBALS是自动全局变量。这意味着它在所有的脚本中都有效。在函数或方法中不需要使用 global $GLOBALS;来访问它。

2、"global $var1;"是产生了函数外部$var1的别名变量"$var1",它不是真正的函数外部变量,他只存在于函数的内部,所以即使在函数内将别名变量删除也不会影响外面的变量,但是可以修改函数外部变量的值。

或许有的人总想知道这个或那个的区别:

在php程序,包括其他程序的学习中,自己动手实验,根据结果加上的思考,有的时候比上网查找可能会来得更快一些,更准确一些。下面我们来讲一下,php在全局范围内访问变量要怎么办?

例一:global定义全局变量。

function test_global(){
    global $var1;
    $var1='ok';
    unset($var1);
}
test_global();
$var2=&$var1;
unset($var1);
echo $var2;

先不给出结果,自己运行一下程序。函数内部的变量可以访问到了。从结果可以看出,unset只是断开变量名与变量值连接,并没有马上销毁变量的值,而且在函数内部定义的全局变量,实际在外部只是使用了函数内部的别名而已,所以我们在外面依然可以访问$var1。

例二:$GLOBALS在函数内部访问函数外面定义的变量。

$waibu='out';
function ff(){
    echo $GLOBALS['waibu'];
}
ff();

直接在函数内部使用$waibu是会出错的。

您可能感兴趣的文章

  • php中在变量和函数前加static关键字之后的区别
  • php $GLOBALS超全局变量分析
  • PHP中跳出多重循环使用break,continue,goto,return,exit的用法和区别
  • PHP中return 和 exit 、break和contiue 区别与用法
  • http请求中同步请求和异步请求的区别
  • php中echo,print,print_r,var_export,var_dump 的用法与区别
  • smarty模板中使用php函数以及smarty模板中如何对一个变量使用多个函数
  • JQuery中阻止事件冒泡方式及其区别

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, 变量
, 全局变量
, global
, var
, 全局
, 全局变量swiftnsarray
, ajaxjavascript全局变量
, php全局变量global
, 全局函数
, 全局数组
, 定义全局变量
, globals
$GLOBALS
js global 全局变量、c global 全局变量、global全局变量、php全局变量global、php中超全局变量,以便于您获取更多的相关知识。

时间: 2024-11-02 08:48:29

PHP中超全局变量$GLOBALS和global的区别的相关文章

深入理解php中$GLOBALS与global区别

php中有一个不为很多人所用的超全局变量$GLOBALS.合理使用这个变量能使工作变得更加有效率,本篇文章主要分析一下这个超全局变量的用法以及$GLOBALS和global的区别. $GLOBALS定义:引用全局作用域中可用的全部变量(一个包含了全部变量的全局组合数组.变量的名字就是数组的键),与所有其他超全局变量不同,$GLOBALS在PHP代码中任何地方总是可用的,自己可以通过打印$GLOBALS这个变量的结果就知道了. global与$GLOBALS['']区别 $GLOBALS $GLO

PHP Global与$GLOBALS变量作用域与区别

Global,全局变量   PHP Global变量在实际应用中会发现许多问题需要我们不断的去完善处理.我们在这篇文章中就针对PHP Global变量出现的问题给出了一些具体的解决办法. PHP hack的使用技巧详解 代码实现PHP GTK写文本查看器 网站开发中PHP语言优缺点 如何正确实现PHP function函数扩展 PHP error_log()函数处理错误日志 1:PHP Global变量的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括includ

非正规公共热点中超两成存风险:蹭网需谨慎

WiFi网络安全问题一直引人关注,在今年央视3.15晚会上,网络工程师演示了钓鱼WiFi是如何窃取用户信息的.直接为攻击而架设的高危热点占到12%,其中在非运营商和政府提供的第三方热点中,带有攻击性的Wi-Fi热点超过23%.业内人士称,实际情况或许更糟.除了之前被多次报道的钓鱼热点外,寄生虫热点.公然勒索信息热点首次出现在公众视野. "寄生虫"WiFi破坏性强 千万别乱蹭网 非官网公共热点中超两成存在安全风险 WiFi网络安全问题一直引人关注,在今年央视3.15晚会上,网络工程师演示

知情人称南勇已招供矛头直指国字号跟中超球队

自从几天前南勇被辽宁省公安部门带走之后,后续的新闻一直未能浮出水面,前中国足协副主席在里面到底怎么样?还会有哪一位大人物即将落马?在中国足坛的打黑反赌浪潮一浪高过一浪时,现在的暂时平静,或许酝酿着更大的风暴.昨天,记者找到了相关人士进行询问,该知情人称南勇已被刑拘,另外他还透露,中纪委的一个小组可能已经介入了案件的调查,南勇目前已经招供.[阅读推荐>>>>鲁媒:南勇曾受贿50万 利用职权助北方某队夺冠] 知情人:南勇招供很多,国字号.俱乐部春节难过 自从相关部门证实南勇.杨一民等人

中超:不可持续的黑马与乱世

中超联赛有点像中国的股市,人心浮躁,规则晦暗,市场化程度低,鲜有人对长期收益抱有信心 如果说奥运会足球决赛场喊出"谢亚龙下课"过于无厘头,那么在中超联赛看台发出这样的怒吼,绝对是正确的场合.当中国最早的职业化联赛被行政干预和奥运战略撕扯得破败不堪,我们看到的不是一次有益的尝试,而是夹在举国体制与体育市场化之间的一个怪胎. 现在的职业联赛,很难给全国球迷奉献些什么难忘的回忆.它的作用已退化为:每年为一座城市带去欢乐--何止是普通的欢乐,实在是巨大的惊喜. 深圳,长春,先后尝到了天上掉下来

我的中超吧 浅谈我的做站之路

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 一直在学习做网站,经过半年的摸爬滚打,我一个空调专业的居然学会建网站了,满以为可以和其他人一样整天在家数钱了.结果我真的错了,开始接触到网站是那些所谓的全民皆赚网站,因为不懂,再加上赚钱的心思比较重,所以我成功的被忽悠了. 一旦喜欢某样东西,真的很快上手,我在一个偶然的机会接触到dz的免费论坛,大家都知道,pw也有但是那时候没碰到,现在来讲我

申花欲引巴西新独狼百万美元身价中超第一外援

客场输给绿城后,申花终于决定更换外援,而他们也将目标瞄准了前柏林赫塔核心.巴西前国脚马塞利尼奥,据悉,一旦双方谈判顺利,那么马塞利尼奥将代表申花踢本年度剩下的15场比赛,而工资大约是100万美金.喜欢变换头发颜色的马塞利尼奥 联赛13轮下来,申花目前的战绩仅仅是5胜4平4负积19分,这样的表现自然不能让球队满意,最近三轮比赛更是1胜2负,前锋巴尔克斯首当其冲,离开申花似乎是不可避免的事情. 在这样的时刻选择换外援,俱乐部已经将目标瞄准了更大牌的外援,其中之一就是前巴西国脚马塞利尼奥.马塞利尼奥今

中超公司上市设想引多方质疑六项指标仅满足一条

新浪体育讯 3月23日北京消息:在鲁骏上任中超公司总经理的第一天就抛出了一个无比"雷人"的设想,他向16家俱乐部股东陈述中超公司未来计划时说:"我准备在三年内要把中超公司运作上市".此言一出让众多业内资深人士都瞠目结舌,这"三年上市"的说法令俱乐部摇头不已,一名老总会后说:"这一下就显示出他在经营上的外行",本来就缺乏足球基础的鲁俊再失去了经营的优势更难以赢得信任. 在香河俱乐部会议上,鲁俊跟16家俱乐部股东见面,他的三年上市

彭锡涛:第一视频受益中超战略 彩票业务创新高

2012年,在http://www.aliyun.com/zixun/aggregation/29280.html">中国足球职业化19年后,中超联赛步入辉煌发展的时代.2013年中超,各俱乐部不断加大引援投入,并邀请英国著名球星贝克汉姆代言,得到多方媒体极大关注,央视5套更是以每周直播三场中超赛事的频率,全面.多视角关注中超联赛.中国足球再次成为人们谈论的焦点. 受益于中超战略的无形平台,4月6日,第一视频集团中国足彩网作为辽宁宏运足球俱乐部本赛季主赞助商,正式以胸前广告形式亮相中超,央