考虑这段代码:
$a = 2;
function foo(){
$a = 3;
return $a;
}
$a = foo();
echo $a;
答案是echo $a == 3
。
如果我错了,请纠正我:
当函数foo()
被重新分配到全局$a
时,它使$a
范围内的foo()
将其关闭更改为全局范围呈现{ {1}}为3?
这会是正确的答案吗?
答案 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