有没有办法在PHP中创建新的范围而不创建新的功能?

时间:2017-06-10 01:46:25

标签: php scope

在java中,我们可以创建一个像这样的新范围:

    {
        //create new scope
        {
    //        create another new scope
        }
    }

但我是否也可以在PHP中创建新的嵌套范围?

1 个答案:

答案 0 :(得分:0)

PHP为整个函数(或必需文件创建范围,如评论中的其他人所述)。您可以通过创建嵌套的匿名函数来模拟嵌套范围:

function scope_outer() {

    $outer_a = 'oa';
    $outer_b = 'ob';
    $inner_a = 'xxx'; // just to check if the nested function overwrites this

    // define anonymous function to simulate nested scope and run it right away
    (function() use($outer_b) {

        $inner_a = 'ia';

        var_dump($outer_a); // error, variable not visible in this scope
        var_dump($outer_b); // "ob"
        var_dump($inner_a); // "ia"

    })();

    var_dump($inner_a); // "xxx" => nested "scope" did *not* overwrite this variable
}

scope_outer();

玩弄小提琴:http://sandbox.onlinephpfunctions.com/code/7b4449fe47cc48aefa61294883400a42659de4c6