官方文档:

global指对变量的引用或者叫指针,$GLOBALS则是变量本身;

$var1 = 1;
$var2 = 2;
function fun(){
$GLOBALS['var2'] = &$GLOBALS['var1'];
echo $GLOBALS['var2'];
$GLOBALS['var2'] = 3;
} fun();
echo $var2;
echo $var1;
echo "\r\n"; function fun1(){
global $var1, $var2;
$var2 = &$var1;
echo $var2;
echo "\r\n";
$var2 = 3;
} fun1();
echo $var2;
echo $var1;

以上代码中函数外部变量可以视为var1指向一个box,box中就是变量值,此处是1,var2指向另外一个box,也是变量值,此处是2;

对于$GLOBALS数组中的var1及var2实际就是这两个变量本身,也就是不是另外两块分别指向两个box的变量空间;

所以在函数内部改变var2的值,也就是第二个box的值被复制成了第一个box的值,第一次echo就是复制的第一个box的值,然后在函数内部重新赋值为3,外部的var2自然也就改变,因为它们同为一个变量;

接着如果函数内部var2被赋值为&var1,也就是将var2指向了第二个box,此时var1,var2都指向了box1,自然var2改变了值,也就是第一个box中的值被改变了。

而对于global则相当于内部重新分配了两个同名变量空间,但是呢,var1指向外部那个var1的box,var2指向外部那个var2的box,此时box成了4个,给var2赋值为var1,实际就是将两个var1指向的那个box的值复制给两个var2指向的box,此时自然在var2被重新赋值后,外部的var2值也变了,但是var1的值并没有被改变;但若改为给var1赋值&var2,也就意味着内部的var2已经指向了内外部var1指向的第一个box,唯独外部的var2还是指向第二个box,此时改变内部var2的值,只会影响内外部var1和内部已经改变指向的var2那个box,即第一个box的值,但是第二个box的值,也就是外部var2指向的box值并未改变。

如此,便明了了。

php中global和$GLOBALS最浅显易懂的解释的更多相关文章

  1. PHP中global与$GLOBALS['']的区别

    +++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GL ...

  2. php中global与$GLOBALS的用法及区别-转载

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  3. php中global与$GLOBALS的用法及区别

    php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...

  4. php中global和$GLOBALS[]的分析之一

    PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖       这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数 ...

  5. (转)php中global和$GLOBALS[]的分析之一

    PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖     这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数中使 ...

  6. PHP中global与$GLOBALS的区别

    单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以带到全局去. $GLOBALS 是一个关联数组,每一个变 ...

  7. php 中 global 与 $GLOBAL 由引用产生的区别

    很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的 ...

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

    一.超全局变量$GLOBALS PHP超全局变量有很多,如下的都属于超全局变量(Superglobal): $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKI ...

  9. PHP中全局变量的使用global和$GLOBALS[]

    From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用, ...

随机推荐

  1. [MYSQL] 如何彻底卸载MYSQL5.x

    找了这么久,只有这个可以完全卸载~~~,转自http://www.doc88.com/p-9435498025667.html

  2. Ubuntu16.04中MySQL之中文不能插入问题

    转自:http://blog.csdn.net/fr555wlj/article/details/55668476 今天下午在学习MySQL时,向表中插入一条数据含有中文,结果报错如下, ERROR ...

  3. [CF1110H]Modest Substrings

    description CodeForces 定义一个正整数\(x\)是合适的当且仅当\(l\le x\le r\),其中\(l,r\le 10^{800}\). 找到一个长度为\(n\)的数字串,使 ...

  4. Mininet 系列实验(三)

    实验内容 基础 Mininet 可视化界面进行自定义拓扑及拓扑设备自定义设置,实现自定义脚本应用. 参考 Mininet可视化应用 实验环境 虚拟机: Oracle VM VirtualBox Ubu ...

  5. 洛谷 P4009 汽车加油行驶问题 解题报告

    P4009 汽车加油行驶问题 题目描述 给定一个\(N×N\)的方形网格,设其左上角为起点◎,坐标(1,1) ,\(X\)轴向右为正,\(Y\)轴向下为正,每个方格边长为1 ,如图所示. 一辆汽车从起 ...

  6. 使用rundll32.exe绕过应用程序白名单(多种方法)

    0x00 前言 本文演示了白名单AppLocker bypass的最常见和最熟悉的技术.我们知道,出于安全原因,系统管理员添加组策略来限制本地用户的应用程序执行.在上一篇文章中,我们讨论了“ Wind ...

  7. 【agc001d】Arrays and Palindrome

    Portal -->agc001D Description 给你一个\(m\)个数的排列\(A\),这个\(A\)中元素的顺序可以随便调换,\(A\)中的元素的和为\(n\),现在要你构造一个数 ...

  8. 二分查找(等于x,小于x,小于等于x,大于x,大于等于x )

    //等于x//小于x//小于等于x//大于x//大于等于x #include <cstdio> #include <cstdlib> #include <cmath> ...

  9. Tensorflow Object_Detection 目标检测 笔记

    Tensorflow models Code:https://github.com/tensorflow/models 编写时间:2017.7 记录在使用Object_Detection 中遇到的问题 ...

  10. 个人在 laravel 开发中使用到的一些技巧(持续更新)

    1.更高效率地查询:使用批量查询代替 foreach 查询(多次 io 操作转换为一次 io操作) 如果想要查看更详尽的介绍,可以看看这篇文章 什么是 N+1 问题,以及如何解决 Laravel 的 ...