PHP & HTML foreach 的替代语法:未定义的变量

PHP & HTML Alternate syntax for foreach: Undefined variable

编辑:我在这些示例中使用了 wamp。

关于 foreach 中的 PHP 和 HTML 备用语法,肯定有一些我没有弄清楚的地方。

以下代码导致

Notice: Undefined variable: array1Value in index.php on line 8

Notice: Undefined variable: array2Value in index.php on line 12

1: <?php
2: $array1 = getArray1(); // Returns an array with values
3: $array2 = getArray2(); // Also returns an array with values
4: ?>
5:
6:    <div class="doNotRemoveDiv">
7:        <? foreach($array1 as $array1Value): ?>
8:            <?= $array1Value ?>
9:        <? endforeach; ?>
10:
11:       <? foreach($array2 as $array2Value): ?>
12:           <?= $array2Value ?>
13:       <? endforeach; ?>
14:   </div>

我也试过了

$array1 = ['value1', 'value2', 'value3'];
$array2 = ['value1', 'value2', 'value3'];

这里一定有什么很明显的东西,我只是愚蠢。

P.S。我知道我可以这样做:

6:    <div class="doNotRemoveDiv">
7:        <?php foreach($array1 as $array1Value) {
8:            echo $array1Value;
9:        } ?>
10:   </div>

这行得通,但我真的很想了解为什么我的示例行不通。

您必须启用 short_open_tag 配置值才能使用短标签 <? 而不是 <?php。从 PHP 5.4.0 开始,您可以使用 <?= 而无需启用此指令

你每次只收到一次警告,对吧?

那是因为你的循环实际上并没有执行——因为你只在 foreach 语句上使用了 <?,如果 short_open_tags 关闭,这意味着你的循环语句根本不执行——所以变量不是一开始就设置的。但是随后您尝试使用 <?= 输出它们,并且无论上述设置如何都有效。

(修复该问题后,您仍会收到第二个循环的警告,因为在 foreach 语句中您使用了带有大写字母 V$array2Value,但随后 $array2value 在循环中使用小写字母 v。)