PHP代码 - 需要重新确认基本范围知识

时间:2016-09-13 14:32:30

标签: php scope closures

考虑这段代码:

$a = 2;
function foo(){
    $a = 3;
    return $a;
}
$a = foo();
echo $a;

答案是echo $a == 3

如果我错了,请纠正我:

当函数foo()被重新分配到全局$a时,它使$a范围内的foo()将其关闭更改为全局范围呈现{ {1}}为3?

这会是正确的答案吗?

1 个答案:

答案 0 :(得分:1)

代码中没有闭包。期。 PHP按值传递(并返回)。 PHP中也只有两个变量范围:全局和本地。

$a = 2; // global scope
function foo() {
    $a = 3; // local variable scope
    return $a;   // return value of local variable to calling context
}
$a = foo(); // assign value returned from function to $a

考虑这个选择:

$a = 1; 
$b = 10;

function foo() {
    echo $a, $b; // warning: undefined variable on both "a" and "b"
    global $a;   // "import" $a in the local scope
    echo $a, $b; // output "1" for a, and undef var. warning for "b" again
    $a = 2;      // changes the global value
    $b = 20;     // local-only change
    echo $a, $b; // output "2" and "20"
}
echo $a, $b; // "1" and "10"
foo();
echo $a, $b; // "2" and "10": b was local-only, so did not get changed globally in the function