官方文档:

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值并未改变。

如此,便明了了。

最新文章

  1. 计数排序(counting-sort)——算法导论(9)
  2. Linux下的shell编程(三)BY 四喜三顺
  3. Theano2.1.3-基础知识之更多的例子
  4. [JS]应用splice删除多元素时出现的坑
  5. Java虚拟机支持的最大内存限制
  6. python中Url链接编码处理(urlencode,urldecode)
  7. Getting Started Synchronizing Files
  8. 《深入浅出WPF》 学习笔记
  9. 单例模式Java“完美”实现
  10. 谈谈UIView的几个layout方法-layoutSubviews、layoutIfNeeded、setNeedsLayout...
  11. haproxy之负载均衡算法
  12. 小白学C++的小问题
  13. Android onTouchEvent方法
  14. hdu_2089(数位dp)
  15. 【Linux基础】VI 编辑器基本使用方法
  16. Rose 2003使用的问题
  17. 【VMware vSphere】再谈VMware vSphere
  18. openstack学习-KeyStone安装(二)
  19. pycharm运行pytest
  20. win10装回win7。PE下把原来的系统盘格掉,再安装hdd,重启就好了

热门文章

  1. onMeasure实例分析
  2. SQL利用Case When Then多条件
  3. UVA11374_Airport Express
  4. 数据结构开发(14):KMP 子串查找算法
  5. PHP中文字符gbk编码与UTF-8编码的转换
  6. 【CF938G】Shortest Path Queries(线段树分治,并查集,线性基)
  7. 【codeforces 528D】 Fuzzy Search
  8. 响应式开发(四)-----Bootstrap CSS----------Bootstrap CSS概览和相关注意事项
  9. 关于strassen矩阵乘法的矩阵大小不是2^k的形式时,时间复杂度是否还是比朴素算法好的看法
  10. BZOJ 3160 FFT+马拉车