php中global和$GLOBALS最浅显易懂的解释
官方文档:
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最浅显易懂的解释的更多相关文章
- PHP中global与$GLOBALS['']的区别
+++ 探讨(一)+++++++++++++++++++++++++++++++++++++++ 很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GL ...
- php中global与$GLOBALS的用法及区别-转载
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- php中global与$GLOBALS的用法及区别
php中global 与 $GLOBALS[""] 差别 原本觉得global和$GLOBALS除了写法不一样觉得,其他都一样,可是在实际利用中发现2者的差别还是很大的! 先看下面 ...
- php中global和$GLOBALS[]的分析之一
PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖 这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数 ...
- (转)php中global和$GLOBALS[]的分析之一
PHP 的全局变量和 C 语言有一点点不同,在 C 语言中,全局变量在函数中自动生效,除非被局部变量覆盖 这可能引起一些问题,有些人可能漫不经心的改变一个全局变量.PHP 中全局变量在函数中使 ...
- PHP中global与$GLOBALS的区别
单一个global是一个关键字,通常附加在变量前,用于将变量声明至全局作用域: $GLOBALS是预定义的超全局变量,把变量扔到里边的话一样可以带到全局去. $GLOBALS 是一个关联数组,每一个变 ...
- php 中 global 与 $GLOBAL 由引用产生的区别
很多人都认为global和$GLOBALS[]只是写法上面的差别,其实不然. 根据官方的解释是 $GLOBALS['var'] 是外部的全局变量$var本身. global $var 是外部$var的 ...
- PHP中超全局变量$GLOBALS和global的区别
一.超全局变量$GLOBALS PHP超全局变量有很多,如下的都属于超全局变量(Superglobal): $GLOBALS,$_SERVER,$_GET,$_POST,$_FILES,$_COOKI ...
- PHP中全局变量的使用global和$GLOBALS[]
From: http://blog.csdn.net/happyqyt/article/details/7219889 用PHP开发项目,不可避免的会使用到全局变量,比如一些网站的配置信息,全站通用, ...
随机推荐
- Log4j读取配置文件并使用
/** 设置配置路径从环境变量读取 * PropertyConfigurator类加载.properties文件的配置 * DOMConfigurator加载.xml文件的配置 ...
- Spring(1):Spring简介
一句话概括: Spring是一种轻量级控制反转IoC和面向切面AOP的容器框架 初衷: 使用接口编程而不是类 为javabean提供一个更好的应用配置框架 javabean是一种规范而不是技术.是指符 ...
- Genaro Network —— 区块链3.0缔造者
在2018年1月26日硅谷密探在美国旧金山艺术宫成功举办了“Blockchain Connect Conference”.在大会上,Genaro Network 联合CEO Jason Inch 携同 ...
- 学习Spring Boot:(六) 集成Swagger2
前言 Swagger是用来描述和文档化RESTful API的一个项目.Swagger Spec是一套规范,定义了该如何去描述一个RESTful API.类似的项目还有RAML.API Bluepri ...
- 单点登录(十二)-----遇到问题-----cas启用mongodb验证方式登录后没反应-pac4j-mongo包中的MongoAuthenticatInvocationTargetException
cas启用mongodb验证方式登录后没反应 控制台输出 2017-02-09 20:27:15,766 INFO [org.jasig.cas.authentication.MongoAuthent ...
- vim配置高亮显示
经常使用SecureCRT在linux下修改一些配置文件,使用vi打开总是一个颜色,找起来比较头大. 因为vi不支持高亮,所以需要使用vim. 安装vim:yum install -y vim(ubu ...
- Webpack 学习笔记总结
Webpack安装 Linux系统默认已经安装了node&npm,但版本比较低,而且没法升级,可以重新下载Node然后通过软链接替换系统自带的node和npm; ln -s /path_to/ ...
- bug3 乱码问题
出现乱码问题是因为各软件之间的编码方式不同导致 1.tomcat修改编码方法: 2.myeclipse中修改编码方式的方法: window----preference ----general----- ...
- OpenCV-跟我学一起学数字图像处理之中值滤波
中值滤波(median filter)在数字图像处理中属于空域平滑滤波的内容(spatial filtering).对消除椒盐噪声具有很好的效果. 数学原理 为了讲述的便捷,我们以灰度图为例.RGB三 ...
- dingo 内部调用获取异常信息
$exception->getResponse(); $params = [ 'company_id' => $this->request->input('company_id ...