变量的作用域是变量的一个作用范围,在这个范围内变量为可见的,即可以访问该变量的代码区域, 相反,如果不在这个范围内,变量是不可见的,无法被调用。 (全局变量可以将作用范围看作为整个程序)
花括号
很多语言都以花括号作为作用域界限,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" |
闭包
闭包作用域跟函数类似,内层不能访问外层变量,外层也不能访问内层变量。
01 | <?php |
02 | function a() { |
03 | $test = 'test in a()'; |
04 | function b() { |
05 | var_dump($test); // $test不能被访问 |
06 | $varb = 'varb in b()'; |
07 | } |
08 |
09 | b(); |
10 | var_dump($varb); // $varb也不能被访问 |
11 | } |
12 |
13 | a(); |
14 | ?> |
执行结果:
1 | NULL NULL |
本文详细介绍了PHP中变量的作用域概念,包括不同控制结构如何影响作用域,如if和for语句并不创建新的作用域,而函数则创建独立的作用域。此外还探讨了global关键字的应用场景及闭包的概念。
&spm=1001.2101.3001.5002&articleId=17642835&d=1&t=3&u=c9796e71c0ed436cb837f5b3a751c825)
2489

被折叠的 条评论
为什么被折叠?



