花括号
很多语言都以花括号作为作用域界限,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 |
延伸阅读:
原文:http://www.cnblogs.com/youxin/p/3529955.html