知优码

您现在的位置是:首页 > Php语言 > php进阶

php进阶

深入理解php变量作用域范围

2020-04-24php进阶
php中变量的作用域是按照函数为界线划分的,函数外定义的所有变量称为全局变量。函数内定义的所有变量称为局部变量。需要注意的是if else while等代码块不是函数,属于语言结构,在其中声明的变量作用域同上。即函数内为局部,函数外为全局。


php中变量的作用域是按照函数为界线划分的,函数外定义的所有变量称为全局变量。函数内定义的所有变量称为局部变量。
需要注意的是if else while等代码块不是函数,属于语言结构,在其中声明的变量作用域同上。即函数内为局部,函数外为全局。

一、变量作用范围的分类
PHP中定义的变量的作用范围分为三个层次。

  1. 超全局变量Superglobals 。所有代码区域内都可以访问。
  2. 全局变量。函数外可用,函数内不可用。
  3. 局部变量。函数外不可用,函数内可用。

二、超全局变量
在全部作用域中始终可用的内置变量,这意味着它们在一个脚本的全部作用域中都可用。在函数或方法中无需执行 global $variable; 就可以使用它们。
超全局变量:
$GLOBALS 
$_SERVER
$_GET
$_POST
$_FILES
$_COOKIE
$_SESSION
$_REQUEST
$_ENV

三、全局变量
函数外定义的变量统称为全局变量,在函数内不可用。如果要使用需使用global关键字。

四、局部变量
函数内定义的变量为局部变量,只能在函数内使用,函数外面无法使用。
函数内的static静态变量,也是局部变量,在函数外部无法使用。

五、示例

<?php
$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引用赋值操作符到底是什么