PHP学习笔记——变量作用域

变量作用域

变量的作用域即它定义的上下文背景,也就是它的生效范围。在php中,关于变量作用域有以下六条规则:

  • 内置的超全局变量在脚本的任何地方都可见,比如$_GET, $_POST, $_REQUEST等。

  • 常量,一旦定义,全局可见,它们可以在函数内部或外部被使用。

  • 脚本中定义的全局变量在整个脚本中可见,但在函数内部不可见。如果想在函数内部也可见,需要使用global声明该变量。

  • 在函数内部创建的变量只在函数内可见,当函数运行结束时,该局部变量的作用域终结。

  • 在函数内部创建的变量如果使用static进行了修饰,那么该变量虽然从函数外部不可见,但是在函数运行结束时该变量并没有终结,而是能够保持它的值,等待下一次的函数执行。

超全局变量

在PHP中,为了使用上的方便,内置了一些超级全局变量,这些超全局变量是在全部作用域中始终可用的内置变量。下面是php中支持的超全局变量的列表:

  • $GLOBALS: 包含脚本中所有自定义的全局变量的数组。使用该全局数组可以替代函数中的global修饰符,让你在函数中访问这些全局变量,比如$GLOBALS['myvariabl']。

  • $_SERVER: 包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。

  • $_GET: 包含通过GET方法提交给php脚本的所有变量的数组。

  • $_POST: 包含通过POST方法提交给php脚本的所有变量的数组。

  • $_COOKIE: 包含cookie变量的数组。

  • $_FILES: 包含上传文件相关的变量的数组。

  • $_ENV: 通过环境方式传递给当前脚本的变量的数组。

  • $_REQUEST: 包含了$_GET, $_POST, $_COOKIE三个数组信息的大数组。

  • $_SESSION: 当前脚本可用 SESSION 变量的数组。

global关键字

在php中,函数是一个重要的作用域范围,一定要理解清楚不同的变量类型在函数内和函数外作用域区别。

比如下面的代码:


这段php脚本执行后没有任何输出。可能我们会想当然的认为函数内部使用的$a就是外面定义的全局变量$a,但php的运行机制并非如此。函数内部的$a是一个完全独立于外部全局变量$a的局部变量,而且因为没有被赋值,所以输出为空。而在C语言中,全局变量在函数内部自动生效,除非你又定义了一个局部变量覆盖了它。

那么这种情况,要想在函数内部使用外部的全局变量,就需要global关键字出场了。看下面的代码:


这段php脚本执行后输出1,可见使用了global关键字后,函数内部的$a指向了外部的全局变量。

如果不使用global关键字,达到相同的效果,也可以使用PHP内置的超全局变量$GLOBALS,修改后代码如下:


执行这个脚本后,同样输出1。

你可能感兴趣的:(PHP学习笔记——变量作用域)