码迷,mamicode.com
首页 > 其他好文 > 详细

超全局变量

时间:2016-11-20 06:29:23      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:global   应该   而不是   family   效果   strong   例子   src   php   

  今天想写的内容叫做超全局变量。

  为什么会想写这个东西的知识呢?一点是这个知识的内容很容易和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的关系并不是引用传递的关系,甚至比引用传递更“亲密”,因为它们所有的操作都是同步的,无论其中的一个做了任何的修改,都会以直接的相同的方式影响到另一个

 

 

 

 

 

 

 

超全局变量

标签:global   应该   而不是   family   效果   strong   例子   src   php   

原文地址:http://www.cnblogs.com/yexiaodoong/p/6081914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!