变量的作用域是脚本中变量可被引用和使用的部分,PHP 中有四种不同的变量作用域:
序号 | 作用域 | 描述 |
---|---|---|
1 | local | 局部作用域 |
2 | global | 全局作用域 |
3 | static | 静态作用域 |
4 | parameter | 函数参数作用域 |
1、local(本地的)—— 局部变量的作用域
在 PHP 函数内部声明的变量是局部变量,仅能在函数内部访问。
<?php function test() { $a = 15; echo "内部输出结果:" . $a; } echo "外部输出结果:" . $a; // 无法访问变量 a echo PHP_EOL; test(); ?>
输出结果:
外部输出结果: 内部输出结果:15
2、global(总体的)—— 全局变量的作用域
在所有函数外部定义的变量是全局变量,除了函数外,全局变量可以被脚本中的任何部分访问、要在一个函数中访问一个全局变量,需要使用 global 关键字。
<?php $x = 5; $y = 10; $z = 0; function test() { global$x,$y,$z; $z = $x + $y; } test(); echo $z; ?>
结果:15
PHP 将所有的全局变量存储在一个名为 $GLOBALS[index] 的数组里,index 保存变量的名称。
这个数组可以在函数内部访问,也可以直接用来更新全局变量。
<?php $x = 5; $y = 10; $z = 0; function test() { $GLOBALS['z'] = $GLOBALS['x']+$GLOBALS['y']; } Test(); echo $z; ?>
结果:15
3、static(静态的)—— static 作用域
当一个函数执行完成时,它的所有变量通常都会被删除。
然而,有时需要局部变量不要被删除,要做到这一点,请在您第一次声明变量时使用 static 关键字。
当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。
<?php function test() { static $x=0; echo $x . " "; $x++; } test(); test(); test(); test(); ?>
结果:0 1 2 3
每次调用函数时, 该变量将会保留请前函的前被调用的值一次。
4、parameter(参数)——参数作用域
参数是通过调用代码将值传递给函数的局部变量。
关于局部变量和全局变量的优先级,因为在PHP中函数都有自己单独的作用域,所以在局部变量的优先级要大于全局变量(在你不声明这个变量之前),声明之后此变量就变成了局部变量如果修改值那么全局变量的值也会改变。
<?php $a = 10; $b = 5; function test() { $a = 15; $b = 5; $z = $a-$b; echo $z; } test(); function test1() { global $a,$b; $a = 15; $b = 5; $z = $a-$b; echo PHP_EOL; echo $z; } test1(); function test2() { global $a,$b; $z= $a-$b; echo PHP_EOL; echo $z; } test2(); ?>
结果:10 10 10