函数和子函数中的变量范围?

时间:2015-08-12 09:03:52

标签: php function scope

我很抱歉,如果之前已经回答过 - 我搜索过但无法找到明确的答案。

如果我的函数foo()处理变量$x,然后是子函数bar(),我该如何访问$x

function foo(){       

    $x = 0;

    function bar(){

        //do something with $x

    }

}

这段代码是否正确,或者是否有更好的实践来访问父函数中的变量?

2 个答案:

答案 0 :(得分:1)

请注意在子函数中使用全局变量:

这将无法正常工作......

<?php 
function foo(){ 
    $f_a = 'a'; 

    function bar(){ 
        global $f_a; 
        echo '"f_a" in BAR is: ' . $f_a . '<br />';  // doesn't work, var is empty! 
    } 

    bar(); 
    echo '"f_a" in FOO is: ' . $f_a . '<br />'; 
} 
?> 

这将...

<?php 
function foo(){ 
    global $f_a;   // <- Notice to this 
    $f_a = 'a'; 

    function bar(){ 
        global $f_a; 
        echo '"f_a" in BAR is: ' . $f_a . '<br />';  // work!, var is 'a' 
    } 

    bar(); 
    echo '"f_a" in FOO is: ' . $f_a . '<br />'; 
} 
?>

有关此处的更多信息,请http://php.net/manual/en/language.variables.scope.php php中有全局变量的缺点所以请从这里阅读 Are global variables in PHP considered bad practice? If so, why?

答案 1 :(得分:0)

您可以将其作为参数传递:

function foo(){       

    $x = 0;

    function bar($x){

        //Do something with $x;

    }

    bar($x);

}

或者你可以创建一个闭包:

function foo(){       

    $x = 0;

    $bar = function() use ($x) {

        //Do something with x
    };

    $bar();

}