PHP变量作用域

来源:互联网 发布:教师网络研修心得体会 编辑:程序博客网 时间:2024/06/04 18:36

花括号

很多语言都以花括号作为作用域界限,PHP中只有函数的花括号才构成新的作用域。

01<?php
02if (True) {
03    $a 'var a';
04}
05 
06var_dump($a);
07 
08for ($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 
16var_dump($b);
17var_dump($c);
18?>

运行结果是:

1string(5) "var a" string(5) "var c" string(5) "var b" string(5) "var c"

可见iffor的花括号并无构成新的作用域。

而函数:

1<?php
2function test() {
3    $test 'var test';
4}
5 
6test();
7var_dump($test);
8?>

结果是:

1NULL

 

global关键字

PHP的执行是以一个.php脚本为单位,在一个.php脚本的执行过程中,可以include和require其他PHP脚本进来执行。

执行的.php脚本与include/require进来的脚本共享一个全局域(global scope)。

global关键字无论在哪层,所引用的都是全局域的变量。

01<?php
02$test 'global test';
03function a() {
04    $test 'test in a()';
05    function b() {
06        global $test;
07        var_dump($test);
08    }
09    b();
10}
11 
12a();
13?>

执行结果是:

1string(11) "global test"

 

闭包

闭包作用域跟函数类似,内层访问外层变量,外层不能访问内层变量。

01<?php
02function 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 
13a();
14?>

执行结果:

1NULL NULL
0 0
原创粉丝点击