php中变量的作用域是按照函数为界线划分的,函数外定义的所有变量称为全局变量。函数内定义的所有变量称为局部变量。
需要注意的是if else while等代码块不是函数,属于语言结构,在其中声明的变量作用域同上。即函数内为局部,函数外为全局。
一、变量作用范围的分类
PHP中定义的变量的作用范围分为三个层次。
超全局变量Superglobals 。所有代码区域内都可以访问。
全局变量。函数外可用,函数内不可用。
局部变量。函数外不可用,函数内可用。
二、超全局变量
在全部作用域中始终可用的内置变量,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以使用它们。
超全局变量:
$GLOBALS
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV
三、全局变量
函数外定义的变量统称为全局变量,在函数内不可用。如果要使用需使用global关键字。
四、局部变量
函数内定义的变量为局部变量,只能在函数内使用,函数外面无法使用。
函数内的static静态变量,也是局部变量,在函数外部无法使用。
五、示例
$x = 100; //全局变量
if($x){
$y=200; //全局变量
}
function localVar(){
$z=300;//局部变量,函数外不可访问。
global $x; //绑定全局变量x
echo $x; //输出100
echo $y; //无输出,未定义变量
echo $z; //输出300
}
localVar();
函数内的global关键字,实际上是建立了一个到全局变量的引用。
global详解看这篇:
php引用赋值操作符到底是什么