globle php,PHP中$GLOBALS与global的区别详解
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的区别详解相关推荐
- php中globals,PHP中$GLOBALS和global的区别
在PHP中经常遇到$GLOBALS和global来定义和访问全局变量,那么在什么地方该用$GLOBALS,而什么地方该用global呢?这就需要我们清除了解$GLOBALS和global的区别,我也谈 ...
- python函数 global_Python global全局变量函数详解
global语句的作用 在编写程序的时候,如果想为一个在函数外的变量重新赋值,并且这个变量会作用于许多函数中时,就需要告诉python这个变量的作用域是全局变量.此时用global语句就可以变成这个任 ...
- 一文读懂——全局注意力机制(global attention)详解与代码实现
废话不多说,直接先上全局注意力机制的模型结构图. 如何通过Global Attention获得每个单词的上下文向量,从而获得子句向量呢?如下几步: 代码如下所示: x = Embedding(inpu ...
- php的globle超全局变量,php中全局变量global和超全局变量$GLOBALS
php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...
- Python实用技巧:global关键字的用法详解
这篇文章主要介绍了python global关键字的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下: 想要更好的了解global关键字,首先 ...
- 、简述global关键字的作用_详解static inline关键字
详解static inline关键字 本文章为知乎用户 @徐yang哟 原创,禁止抄袭! 灵感来源 在查stm32的LL库部分函数的API时,有时会查到这种函数: __STATIC_INLINE vo ...
- python全局变量global线程安全_对python多线程与global变量详解
今天早上起来写爬虫,基本框架已经搭好,添加多线程爬取功能时,发现出错: 比如在下载文件的url列表中加入200个url,开启50个线程.我的爬虫-竟然将50个url爬取并全部命名为0.html,也就是 ...
- [转]PHP 超全局变量详解 $GLOBALS $_SERVER $_GET $_POST $_COOKIE $_FILES $_ENV $_REQUEST $_SE
PHP 超全局变量 $GLOBALS 包含一个引用指向每个当前脚本的全局范围内有效的变量.该数组的键标为全局变量的 名称.从 PHP 3 开始存在 $GLOBALS 数组. $_SERVER 变量由 ...
- python中global和def_Python中 Global和Nonlocal的用法详解
nonlocal 和 global 也很容易混淆.简单记录下自己的理解. 解释 global 总之一句话,作用域是全局的,就是会修改这个变量对应地址的值. global 语句是一个声明,它适用于整个当 ...
最新文章
- GDAL算法进度条使用说明
- Git SSH Key 生成并添加到github/gitee步骤
- 【转】CentOS 6.6 升级GCC G++ (当前最新版本为v6.1.0) (完整)
- 机器学习相关的一些术语
- 线上活动预告丨拥抱金融科技 洞见数据未来
- 比较和同步两个SQL Server数据库之间的图像
- 【Python】【网络编程】
- 反射ModelToDto
- github系列(一) Windows环境下载与安装
- mysql数据库默认管理员是_数据库管理员密码的设置
- 关于相机(摄相头)的选用
- 12款绝赞的Windows软件,让你的电脑再好用10倍
- 2020 消息中间件MQ与RabbitMQ面试题大全
- 【计算机网络四】网络层
- 逻辑与计算机设计基础实验报告,逻辑和计算机设计基础--课实验报告.doc
- 数据仓库应用篇(一)需求文档模板和需求评审
- Esp32-C3使用gpio唤醒深度睡眠,rtc gpio0~5始终置低,导致低电平唤醒一直复位,高电平唤醒无效?
- 怎样进行电路的抗干扰设计
- 期权理论基础1 对冲法
- 猎聘网2017年校园招聘研发类岗位笔试题