以下代码永远不应该像我所知道的任何其他语言(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
?
答案 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,它将在循环的所有后续运行中可用,除非你再次特别取消它。