变量的作用域是变量的一个作用范围,在这个范围内变量为可见的,即可以访问该变量的代码区域, 相反,如果不在这个范围内,变量是不可见的,无法被调用。 (全局变量可以将作用范围看作为整个程序)
花括号
很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。
01 <?php
02 if (True) {
03 $a = 'var a';
04 }
05
06 var_dump($a);
07
08 for ($i = 0; $i < 1; $i++) {
09 $b = 'var b';
10 for ($i = 0; $i < 1; $i++) {
11 $c = 'var c';
12 }
13 var_dump($c);
14 }
15
16 var_dump($b);
17 var_dump($c);
18 ?>
运行结果是:
1 string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"
可见if和for的花括号并无构成新的作用域。
而函数:
1 <?php
2 function test() {
3 $test = 'var test';
4 }
5
6 test();
7 var_dump($test);
8 ?>
结果是:
1 NULL
global关键字
PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。
执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。
global关键字无论在哪层,所引用的都是全局域的变量。
01 <?php
02 $test = 'global test';
03 function a() {
04 $test = 'test in a()';
05 function b() {
06 global $test;
07 var_dump($test);
08 }
09 b();
10 }
11
12 a();
13 ?>
执行结果是:
1 string(11) "global test"