PHP变量作用域
2015-03-20 09:44
281 查看
花括号
很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。
运行结果是:
可见if和for的花括号并无构成新的作用域。
而函数:
结果是:
global关键字
PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。
执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。
global关键字无论在哪层,所引用的都是全局域的变量。
执行结果是:
闭包
闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。
执行结果:
很多语言都以花括号作为作用域界限,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" |
而函数:
1 | <?php |
2 | function test() { |
3 | $test = 'var test' ; |
4 | } |
5 |
6 | test(); |
7 | var_dump( $test ); |
8 | ?> |
1 | NULL |
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 |