超全局变量

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的关系并不是引用传递的关系,甚至比引用传递更“亲密”,因为它们所有的操作都是同步的,无论其中的一个做了任何的修改,都会以直接的相同的方式影响到另一个

 

 

 

 

 

 

 

以上是关于超全局变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP 全局变量 - 超全局变量

PHP 全局变量 - 超全局变量

php全局变量 超全局变量

php7中之局部变量,全局变量,超全局变量用法和区别

PHP 全局变量 - 超全局变量数组

超全局变量