PHP变量作用域(花括号、global、闭包)

https://www.cnblogs.com/52php/p/5670067.html

花括号

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

if (True) {

    $a 'var a';

}

 

var_dump($a);

 

for ($i = 0; $i < 1; $i++) {

    $b 'var b';

    for ($i = 0; $i < 1; $i++) {

        $c 'var c';

    }

    var_dump($c);

}

 

var_dump($b);

var_dump($c);

?>

运行结果是:

1

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

可见if和for的花括号并无构成新的作用域。

而函数:

1

2

3

4

5

6

7

8

<?php

function test() {

    $test 'var test';

}

 

test();

var_dump($test);

?>

结果是:

1

NULL

 

global关键字

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

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php

$test 'global test';

function a() {

    $test 'test in a()';

    function b() {

        global $test;

        var_dump($test);

    }

    b();

}

 

a();

?>

执行结果是:

1

string(11) "global test"

 

闭包

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php

function a() {

    $test 'test in a()';

    function b() {

        var_dump($test); // $test不能被访问

        $varb 'varb in b()';

    }

 

    b();

    var_dump($varb); // $varb也不能被访问

}

 

a();

?>

执行结果:

1

NULL NULL

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值