全局变量是编程术语中的一种,源自于变量之分。
变量分为局部与全局,局部变量又可称之为内部变量。由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
全局变量既可以是某对象函数创建,也可以是在本程序任何地方创建。全局变量是可以被本程序所有对象或函数引用。一个局部变量在被其它对象引用时,会是一个空值。但全局变量却不会出现这种情况。
全局变量就是在函数外面定义的变量。不能在函数中直接使用。因为它的作用域不会到函数内部。所以在函数内部使用的时候常常看到类似global
$a;
PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。
你不需要特别说明,就可以在函数及类中使用。
PHP 超级全局变量列表:$GLOBALS
$_SERVER
$_REQUEST
$_POST
$_GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
超全局变量作用域在所有脚本都有效。所以,在函数可直接使用。比如
$_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是做不到的,要访问另一个文件中定义的变量只能先包含那个文件。
再要记住:超级全局变量不能被用作可变变量。
$GLOBALS引用只能在当前脚本下使用才能生效.而你是跨脚本引用,当然不行.
唯一的解决办法就是使用会话变量,就是$_数组.
在a. 开始的地方需要开启:
_start();
之后这么写:
$a=5;
$_SESSION['a']=$a;
在b.里同样也要开启SESSION,
session_start();
echo $_SESSION['a'];
这样就能正常输出了.