PHP中$GLOBALS和global都可以实现全局变量的功能,所以很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然。$GLOBALS 是一个超级全局变量,其实是一个数组,而global 则是一个声明全局变量的关键字!

一、超全局变量$GLOBALS

PHP超全局变量有很多,如下的都属于超全局变量(Superglobal):

$GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKIE,$_SESSION,$_REQUEST,$_ENV。

官方说明:

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

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

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

$GLOBALS['var'] 是外部的全局变量$var本身。

global $var 是外部$var的同名引用或者指针。(错误:是个别名引用而已,非指针!!!)

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

$foo="Example content";

test();

function test(){

$foo="local variable";

echo '$foo in current scope: '.$foo."
";

echo '$foo in global scope: '.$GLOBALS["foo"]."
";

}

如上的例子,要访问外部的$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在函数内部访问函数外面定义的变量。

$codetc='out';

function ff(){

echo $GLOBALS['codetc'];

}

ff();

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

globle php,PHP中$GLOBALS与global的区别详解相关推荐

  1. php中globals,PHP中$GLOBALS和global的区别

    在PHP中经常遇到$GLOBALS和global来定义和访问全局变量,那么在什么地方该用$GLOBALS,而什么地方该用global呢?这就需要我们清除了解$GLOBALS和global的区别,我也谈 ...

  2. python函数 global_Python global全局变量函数详解

    global语句的作用 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量.此时用global语句就可以变成这个任 ...

  3. 一文读懂——全局注意力机制(global attention)详解与代码实现

    废话不多说,直接先上全局注意力机制的模型结构图. 如何通过Global Attention获得每个单词的上下文向量,从而获得子句向量呢?如下几步: 代码如下所示: x = Embedding(inpu ...

  4. php的globle超全局变量,php中全局变量global和超全局变量$GLOBALS

    php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...

  5. Python实用技巧:global关键字的用法详解

    这篇文章主要介绍了python global关键字的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下: 想要更好的了解global关键字,首先 ...

  6. 、简述global关键字的作用_详解static inline关键字

    详解static inline关键字 本文章为知乎用户 @徐yang哟 原创,禁止抄袭! 灵感来源 在查stm32的LL库部分函数的API时,有时会查到这种函数: __STATIC_INLINE vo ...

  7. python全局变量global线程安全_对python多线程与global变量详解

    今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错: 比如在下载文件的url列表中加入200个url,开启50个线程.我的爬虫-竟然将50个url爬取并全部命名为0.html,也就是 ...

  8. [转]PHP 超全局变量详解 $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SE

    PHP 超全局变量 $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量.该数组的键标为全局变量的 名称.从 PHP 3 开始存在 $GLOBALS 数组. $_SERVER 变量由 ...

  9. python中global和def_Python中 Global和Nonlocal的用法详解

    nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...

最新文章

  1. GDAL算法进度条使用说明
  2. Git SSH Key 生成并添加到github/gitee步骤
  3. 【转】CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
  4. 机器学习相关的一些术语
  5. 线上活动预告丨拥抱金融科技 洞见数据未来
  6. 比较和同步两个SQL Server数据库之间的图像
  7. 【Python】【网络编程】
  8. 反射ModelToDto
  9. github系列(一) Windows环境下载与安装
  10. mysql数据库默认管理员是_数据库管理员密码的设置
  11. 关于相机(摄相头)的选用
  12. 12款绝赞的Windows软件,让你的电脑再好用10倍
  13. 2020 消息中间件MQ与RabbitMQ面试题大全
  14. 【计算机网络四】网络层
  15. 逻辑与计算机设计基础实验报告,逻辑和计算机设计基础--课实验报告.doc
  16. 数据仓库应用篇(一)需求文档模板和需求评审
  17. Esp32-C3使用gpio唤醒深度睡眠,rtc gpio0~5始终置低,导致低电平唤醒一直复位,高电平唤醒无效?
  18. 怎样进行电路的抗干扰设计
  19. 期权理论基础1 对冲法
  20. 猎聘网2017年校园招聘研发类岗位笔试题

热门文章

  1. BigDecimal的基本认识和加减乘除计算
  2. 基于Pytorch的神经网络之CNN
  3. 数据备份解决方案介绍
  4. oCPC实践录 | 重新理解oCPC之量化流量价值
  5. QT入门项目--简易计算器
  6. QT实现简易的计算器
  7. android-sdk:adb shell Monkey命令入门: (基于网易云APP进行压力稳定性测试)
  8. 个人微信api接口调用-给微信好友或群聊发消息
  9. 使用vASA842配置ASDM645
  10. adb删除图案锁屏密码