PHP全局变量与超级全局变量区别分析


Posted in PHP onApril 01, 2016

本文分析了PHP全局变量与超级全局变量区别。分享给大家供大家参考,具体如下:

全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global $a;

超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如 $_GET,$_SERVER都是超全局变量。除$_GET,$_POST,$_SERVER,$_COOKIE等之外的超全局变量保存在$GLOBALS数组中。注意,不要误写成$_GLOBALS。有点受到$_POST的影响了。

$GLOBAL是一个特殊的php自定义的数组。超级全局变量。跟$_SERVER一样,都属于超全局变量。

在手册中搜索$GLOBALS 就能查询超全局变量的具体说明和使用方法

变量名就是该数组的索引。 说明:使用$GLOBALS['a']定义一个超全局变量后。可以使用$a直接访问

手册中这样解释的:

$GLOBALS — References all variables available in global scope 引用所有在全局范围内的可用的变量

结合例子这样理解:假如在函数外面定义了一个变量$a。那么在函数中可用通过$GLOBALS['a']获取到这个变量的值。所以,$GLOBALS数组里面就是:用户定义的所有全局变量。

为什么称它为超级全局变量。对比$_POST,在函数里面可用直接使用。根本不需要使用global语句了。所以$GLOBALS也是这样的原理,只是$_POST保存是post方式传递的变量。$GLOBALS保存的是用户定义的全局变量。

个人理解:

之前对超级全局变量理解不对:超级全局变量在所有脚本下有效,这样表述导致了理解上细微的偏差。如果在所有脚本下有效,那么是不是$GLOBALS保存的超级全局变量,在一个php文件中定义后,在另一个文件中还能获取到。

显然不会是这样的。估计受到了$_POST的影响,因为它好像所有人都能去访问到。没有意识到,你只能访问到当前处理到的$_POST数据。不可能两个人同时提交留言,php文件获取到post的数据怎么区别。这个数据只能是当前线程的。最后,超级全局变量可以这样看,因为它是相对于全局变量而言的。比全局变量更一个层次,全局变量不能作用到函数内部。它就解决了这个问题。在其他语言中,全局变量都能作用到函数内部。php语言设计就不是这样的。

全局变量直接在函数内使用,那么总得提供一种变量能直接使用的吧。就出来了超级全局变量的概念。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP Ajax实现页面无刷新发表评论
Jan 02 PHP
set_include_path在win和linux下的区别
Jan 10 PHP
关于Intype一些小问题的解决办法
Mar 28 PHP
php增删改查示例自己写的demo
Sep 04 PHP
php实现的一个很好用HTML解析器类可用于采集数据
Sep 23 PHP
Laravel 5框架学习之Blade 简介
Apr 08 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
ThinkPHP在Cli模式下使用模板引擎的方法
Sep 25 PHP
CI框架整合smarty步骤详解
May 19 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
Nov 17 PHP
PHP 7.4 新语法之箭头函数实例详解
May 09 PHP
php设计模式之工厂方法模式分析【星际争霸游戏案例】
Jan 23 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 #PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 #PHP
Zend Studio使用技巧两则
Apr 01 #PHP
PHP数学运算与数据处理实例分析
Apr 01 #PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 #PHP
PHP操作FTP类 (上传、下载、移动、创建等)
Mar 31 #PHP
php获取本机真实IP地址实例代码
Mar 31 #PHP
You might like
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
延长phpmyadmin登录时间的方法
2011/02/06 PHP
php 魔术常量详解及实例代码
2016/12/04 PHP
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
js下用层来实现select的title提示属性
2010/02/23 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
2012年开发人员的16款新鲜的jquery插件体验分享
2012/12/28 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
jquery中ajax处理跨域的三大方式
2016/01/05 Javascript
JS与Ajax Get和Post在使用上的区别实例详解
2016/06/08 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
使用Vue自定义数字键盘组件(体验度极好)
2017/12/19 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
js实现图片3D轮播效果
2019/09/21 Javascript
使用vue重构资讯页面的实例代码解析
2019/11/26 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
JavaScript onclick事件使用方法详解
2020/05/15 Javascript
微信小程序实现选项卡滑动切换
2020/10/22 Javascript
python 远程统计文件代码分享
2015/05/14 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
Python之关于类变量的两种赋值区别详解
2020/03/12 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Banana Republic英国官网:香蕉共和国,GAP集团旗下偏贵族风
2018/04/24 全球购物
您熟悉ORM(Object-Relation Mapping)吗?请谈谈您所理解的ORM
2016/02/08 面试题
Java里面如何创建一个内部类的实例
2015/01/19 面试题
医院总经理职责
2013/12/26 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
期中考试复习计划
2015/01/19 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang