为什么PHP变量在循环周期内是持久的?

时间:2016-11-03 18:07:20

标签: php variables scope

以下代码永远不应该像我所知道的任何其他语言(C,C ++,C#等)那样执行。

<?php

$do = true;

for($i=0; $i<3; $i++) {
    if($do===true) {
        $some_variable = 666;
        echo $some_variable;
        $do = false;
    }
    if(isset($some_variable)) {
        echo $some_variable;
    }
}

为什么PHP不会在下一次循环迭代中取消设置$some_variable

2 个答案:

答案 0 :(得分:0)

因为它是在全局范围内设置的。第一次迭代设置后,变量保持设置。

http://php.net/manual/en/language.variables.scope.php

在这里,您可以将工作移动到具有自己范围的函数。第一次迭代后,$do设置为false,并且不再设置变量:

$do = true;

function do_thing() {
    global $do;
    if($do===true) {
        $some_variable = 666;
        echo $some_variable;
        $do = false;
    }
    if(isset($some_variable)) {
        echo $some_variable;
    }
}

for($i=0; $i<3; $i++) {
    do_thing();
}

答案 1 :(得分:0)

或者,您可以确保在第一次迭代中取消设置$some_variable

<?php

$do = true;

for($i=0; $i<3; $i++) {

    if($do===true) {
        $some_variable = 666;
        // echo $some_variable;
        $do = false;
    }
    if(isset($some_variable)) {
        echo $some_variable;
        unset($some_variable);
    }

}

?>

关键是,因为你在循环的第一次运行中创建$ some_variable,它将在循环的所有后续运行中可用,除非你再次特别取消它。