【问题标题】:Variable scope in for-loop and while-loop [duplicate]for循环和while循环中的变量范围[重复]
【发布时间】:2023-03-31 01:51:01
【问题描述】:

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

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

有人可以帮忙吗?谢谢。

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

【问题讨论】:

  • 因为您在 while 循环中重新声明了 $a .. 使其成为数组的最后一个值..
  • @Naruto 所以你的意思是 $a 不像临时变量?
  • @Naruto 小姐理解。(_)。谢谢
  • 是的。如果你改变 $b = '1' 并在最后部分回显 $b,那么你得到 231。

标签: php python for-loop while-loop


【解决方案1】:

第 1 行的 $aforeach() 循环中的 $a 是同一个对象。在循环结束后,$a 的值是3,在最后一条语句中是echoed。
根据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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      1. 在第一次迭代中:它分配值 2 意味着 $c[0] 的值给 $a
      2. 在下一次迭代中:它分配值 3 意味着将 $c[1] 的值分配给 $a
      3. 之后,$a 的值变为 3 而不是 1。

      这就是为什么结果是 233。而不是 231。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2011-12-06
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多