2012-05-11 103 views
1

我在PHP foreach循环中发现了奇怪的行为。当我这样做是这样的:foreach循环在空数组上循环一次,bug?

<?php 
$arr = array(); 

foreach ($arr as $a) 
{ 
    echo 'Hello'; 
} 
?> 

然后如我所料,没有什么是简单的打印,因为数组是空的,但是当我做这样的:

<? $arr = array(); ?> 

<? foreach ($arr as $a): ?> 
    Hello 
<? endforeach; ?> 

那么这个词“你好”打印一次...即使数组是空的。我不明白为什么这会有不同的表现。对我来说,这看起来像一个错误,但我可能会错过一些东西...

我使用PHP 5.4(Windows)。

如果你想知道,我在我的.phtml文件(模板文件)中使用第二种方法。

+3

您是否启用PHP短代码?也许它显示“你好”,因为PHP没有运行? –

回答

4

我做了一些测试,看起来这是因为short_open_tag已关闭。

您看到“Hello”,因为PHP没有运行。

您需要编辑您的php.ini并将short_open_tag设置为1

从PHP 5.4起,<?php echo别名<?=始终可用,但短标记(<?)语法仍然需要该选项集。

Docs:http://www.php.net/manual/en/ini.core.php#ini.short-open-tag

+0

确实是这个问题。我以为确实工作,短标签已启用。但他们不是,现在正在工作。我会尽快接受你的回答。 – w00

+0

@ w00:是的,在PHP 5.4中启用了<?=',不管是否有'short_open_tag'选项。 –

+0

我不认为short_open_tag是问题所在。试试下面的例子: '$ items =''; foreach((array)$ items as $ item){ \t echo $ item。 'xxx'; }' 即使$ items变量为空,它也会打印“xxx” – Phantom007