for循环和while循环中的变量范围

时间:2014-09-16 07:15:05

标签: php python for-loop while-loop

我是PHP的新手,我不明白为什么下面代码的最终结果是'233'而不是'231',不是foreach中的$ a是临时变量吗?

<?php
    $a = '1';
    $c = array('2', '3');
    foreach($c as $a){
        echo $a ;
    }
    echo $a;
?>

有人可以帮忙吗? THKS。

2014-11-28更新 现在我知道我的问题是什么。正如接受的答案和this answer所指出的那样,foreachwhile都不像functions那样,它们就像$a='3';一样只是普通句子。所以现在我知道这是我的误解而且不只是php,因为我在python中尝试过,它是一样的。

a = 123
b = [1, 2, 3]
for a in b:
    print a
print a

3 个答案:

答案 0 :(得分:6)

第1行的$a$a循环中的foreach()是同一个对象。在循环结束后,$a的值为3,在最后一个语句中为echo
根据php.net:

  

在大多数情况下,所有PHP变量只有一个范围。

仅在函数中,变量范围不同 这将产生您想要的结果'231':

$a = '1';
$c = array('2', '3');
function iterate($temp)
{
    foreach($temp as $a)
        echo $a ;
}
iterate($c)
echo $a;

因为在iterate()函数中,$a独立于调用代码的$a
更多信息:http://php.net/manual/en/language.variables.scope.php

答案 1 :(得分:1)

$a循环中的foreach会覆盖循环外的$a

答案 2 :(得分:0)

您在foreach循环中使用了相同的变量名称。你的foreach工作如下:

  1. 在第一次迭代时:它指定值2意味着$c[0]的值为$a
  2. 在下一次迭代中:它指定值3意味着$c[1]的值为$a
  3. 之后$a的值变为3而不是1。
  4. 这就是为什么结果是233.而不是231。