我有一个具有大层次结构的函数:
function func(){
$a= 0; // Here the variable is 0
while(...){
echo $a; // gives me always 0
for(...){
if(...){
if(...){
$num = func3();
$a = $num; // this $a does not corrospond to $a in the beginning
}
}
}
}
}
有谁知道如何从嵌套范围更改$a
的值?
答案 0 :(得分:4)
在PHP 5.3之前,PHP只有两个范围:全局和本地函数范围。 PHP 5.3引入了闭包,这使得范围情况有点复杂,但它看起来并不像你在这里使用它们。
与许多其他C风格的编程语言不同,括号/块不会调用另一个级别的scopre。您在函数开头声明的$a
与您稍后访问的$a
相同。如果您在$a
中获得的值是意外的,那么缺少的代码(...)正在通过赋值更改其值,或者因为它通过引用传递给正在更改其值的其他函数。
答案 1 :(得分:0)
你可能在之前的范围内使用$ a或者func3()设置了“global $ a;”或者永远不会达到if语句
答案 2 :(得分:-1)
全球化。
global $a;
func() {
$a = 0;
while() {
echo $a;
for() {
if() {
if() {
$a = func3();
}
}
}
}
}