超全局变量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了超全局变量相关的知识,希望对你有一定的参考价值。
今天想写的内容叫做超全局变量。
为什么会想写这个东西的知识呢?一点是这个知识的内容很容易和JS里面的知识弄混淆,还有一点就是自己上课的时候其实听得不是很清楚,课后复习的时候才弄懂的,所以也想做个笔记,以后也会清楚一点。
首先,想了解什么是超全局变量,我们先介绍一下局部变量和全局变量吧。因为这大概也算一个层次性的问题。
变量的作用域:变量的作用域,就是指一个变量在哪能用在哪不能用,也就是一个变量其作用的有效范围!
局部变量:在一个函数内部定义的变量,其作用范围就是局部作用域,该变量也叫作局部变量!
全局作用域:在函数外部定义的变量,其作用范围就是全局作用域,该变量也叫作全局变量。但是,在php中的全局作用域和JS还是有很大不一样的:
(图1)
(图2)
观察一下图一和图2,图1定义的是一个变量的局部作用域,能正常的运行程序,但是图二的全局作用域输出的确实“notice”,这是为什么呢?如果说他的功能和JS中的全局作用域一样的话,那么它一定是可以实现的,所以,之所以在PHP当中的效果不能和JS那样正常运行,我们就要利用“超全局变量”了。
超全局变量:所谓的超全局变量,有点类似于JS中的全局变量,也就是在全局和局部(函数外和函数内)都可以使用的变量!
但是:超全局变量是用户无法自行定义的,他是系统预定义的。
例如:
那么了解了这么多,我们该如何实现数据的超全局化呢??
答案是:可以把这个变量的值先放到一个超全局数组变量里面!
我们一般用的是预定义变量里的 $GLOBALS 来实现!
例子:
分析:在这里我们可以看到我们在函数外定义了两个变量$n1和$n2,那么这两个变量的作用域应该是输出全局变量,他是不能被函数内利用的,但是我们为什么最后却能输出这个变量呢?
首先,我们在函数内定义了一个预定义变量$GLOBALS,然后把前面的全局变量放到这个超全局变量的数组里面!注意这里被放入的值是”n1“而不是"$ni".好的,这就是超全局变量的原理和实现!
注意事项:
1,$GLOBALS数组的每一个元素,都与当前的每一个全局变量是一一对应的,也就是说,每当用户创建一个全局变量,都会自动的在$GLOBALS数组里面增加一个元素,其中元素的键就是全局变量的名字,元素的值就是全局变量的值!
2,反之,每当增加一个$GLOBALS数组的一个元素,就会自动的创建一个全局变量!
3,此时全局变量与$GLOBALS的关系并不是引用传递的关系,甚至比引用传递更“亲密”,因为它们所有的操作都是同步的,无论其中的一个做了任何的修改,都会以直接的相同的方式影响到另一个
以上是关于超全局变量的主要内容,如果未能解决你的问题,请参考以下文章