PHP为什么必须在循环之前预先定义变量?

时间:2015-11-12 20:57:59

标签: php loops variables scope

为什么需要在循环之前预先定义PHP变量才能在循环内部(以及随后的循环之外)使用它?

假设$ results是一个整数数组。

foreach ($results as $key=>$value)
{
    $a = $value[0];
    echo "<BR>".$a;
}
echo "<BR>".$a;

会输出类似的内容:

1
5
7
25
undefined variable $a

我无法在该循环之外使用变量$ a(不以某种方式初始化它),因为它是“未定义的”。

尽管

$a;
foreach ($results as $key=>$value)
{
    $a = $value[0];
    echo "<BR>".$a;
}
echo "<BR>".$a;

会输出类似的内容:

1
5
7
25
25

我可以在外面的任何地方使用$ a。

我觉得它几乎就像一个可变范围问题。

1 个答案:

答案 0 :(得分:5)

因为您尝试通过执行以下操作将字符串连接到不是字符串(或至少尚未存在)的字符串:

$source .= '<source type="' . $format . '" src="' . $src . '">';
      //^ this dot means concat.

在第二个例子中,您在每次迭代中将变量重置为空字符串,声明应该在循环之前,而不是循环:

$source2 = '';
foreach( $formats as $format => $src ){   
    if ( !empty( $src ) ) {
        $source2 .= '<source type="' . $format . '" src="' . $src . '">';
    }
}
echo $source2;

正如@ drew010在他的评论中所述,该变量实际上是由php创建的,但你会得到通知显示(如果你有你的php设置,那么它们将被显示)。

相关问题