2015-08-27 36 views
6

我創建2個簡單的例子:循環用大括號導致錯誤的輸出

第一個例子:

<?php $arr = array(1,2,3,4,5); ?> 

<?php foreach ($arr as $element) ?> 
<?php { ?> 
    <?php echo $element; ?> 
<?php } ?> 

輸出:

5 //Is this result wrong? 

第二個例子:

<?php $arr = array(1,2,3,4,5); ?> 

<?php foreach ($arr as $element) { ?> 
    <?php echo $element; ?> 
<?php } ?> 

輸出:

12345 

我對PHP語法有什麼想法?

我知道有一個替代的foreach語法,但在我看來,這兩個顯示的例子應該導致相同的輸出。 (代碼PHP版本測試:5.6.12)

編輯:

我知道是不是需要在每行的標籤。 更確切地說:我想知道爲什麼這兩個例子給了我兩個不同的結果?

+0

我知道:d 只是想知道有關這個輸出的原因... – Thulur

+0

只是把在最後.....你爲什麼要使用它在每一行.. –

+3

只是猜測,但也許在第一個例子中??實際上被視爲語句結束(循環可以使用沒有大括號)。此時,循環已經發生,'$ element'是最後一個值。然後,大括號只是作爲一個代碼塊,你回聲,這是5。 –

回答

5

基於輸出,我的猜測是:

<?php $arr = array(1,2,3,4,5); ?> 

<?php foreach ($arr as $element) ?> 
<?php { ?> 
    <?php echo $element; ?> 
<?php } ?> 

被解釋爲:

<?php 
$arr = array(1,2,3,4,5); 

foreach ($arr as $element); 
{ 
    echo $element; 
} 
?> 

看起來像解釋器中的錯誤?通過Rizier123看評論:

  1. 不是一個錯誤:在foreach()後stackoverflow.com/q/29284075/3933332
  2. 括號/ 奈何這裏 /;只是一個語句組:php.net/manual/en/control-structures.intro.php

不管怎麼說,代碼看起來殘暴與你寫的方式。請選擇更清晰的代碼。


通讀問題下的評論我覺得Jon Stirling解釋這種症狀最好的:

只是猜測,但也許>在第一個例子實際上是被當作語句end(?循環可以不用大括號使用)。此時,循環已經發生,$ element是最後一個值。然後大括號只是作爲代碼塊,你回聲,這是5。

+1

不是bug:http://stackoverflow.com/q/29284075/3933332 – Rizier123

+3

+ foreach()/ *後面的括號在這裏什麼都不做* /;'只是一個語句組:http:// php。 net/manual/en/control-structures.intro.php – Rizier123

+0

我同意不做任何事情,但在這種情況下,不應該在大括號中未知元素嗎? – Thulur

0

你並不需要使用<?php?>每一行簡單地做:

<?php 
$arr = array(1,2,3,4,5); 

foreach ($arr as $element) { 
echo $element; 
} 
?> 

或者替代語法:

<?php 
$arr = array(1,2,3,4,5); 

foreach ($arr as $element) 
{ 
echo $element; 
} 
?> 

或者

<?php 
$arr = array(1,2,3,4,5); 

foreach ($arr as $element): 
echo $element; 
endforeach; 
?> 

當你正在做這個:

<?php foreach ($arr as $element) ?> 
<?php { ?> 
    <?php echo $element; ?> 
<?php } ?> 

PHP循環任何操作,因爲它看到

foreach ($arr as $element) 
{ 
} 
echo $element; 
+1

這是真的,你不需要它。但是這仍然不能回答OP的問題。 –

0

超過使用<? php>是你的問題。

您正在完成foreach上下文,然後輸出結果,而不是在第二個。

仔細看看你的例子,你應該看到你在做什麼不同。

0

我不知道你爲什麼使用這麼多的PHP標籤,但這就是爲什麼它不工作! 試試這個:

<?php $arr = array(1,2,3,4,5); 

foreach ($arr as $element) 
{ 
    echo $element; 
} ?> 
+0

不是OP要求的。他問爲什麼在一個新行中使用「{」會導致不同的行爲。 – Bonatti