2013-10-15 40 views
0

爲什麼這是有效的:ECHO在FOR LOOP的第三個exp中不起作用,但PRINT可行嗎?

for ($i = 0; $i < 10; print $i++); 

,這給語法錯誤:

for ($i = 0; $i < 10; echo $i++); 

有什麼區別?兩者都是語言結構。 有沒有規則什麼是有效的,什麼不是?

+2

可能的重複[在PHP中如何回顯和打印不同?](http://stackoverflow.com/questions/234241/how-are-echo-and-print-different-in-php) – We0

回答

2

你是對的,echoprint都是語言結構,但print的行爲更像一個功能,而不是你意識到的。在內部,print被視爲由PHP函數,因爲它總是返回一個值(int 1)。

正是因爲這個關鍵的區別,即PHP解釋器允許調用這個特殊語言結構在for循環 - 因爲它把print的功能,因此,它可以在上下文中,其中正常使用你會使用函數。考慮下面的代碼

<?php (1 > 0) ? print 'true' : print 'false'; ?> 

上面的代碼將工作,它將打印'真'。但是,請考慮以下內容:

<?php (1 > 0) ? echo 'true' : echo 'false'; ?> 
<?php (1 > 0) ? return 'true' : yield 'false'; ?> 
<?php (1 > 0) ? continue : break; ?> 

這些示例都不是有效的,並且會引發致命的解析錯誤警告。這是因爲語言結構的處理方式有些模糊(尤其是print,它與其他所有結構不同),因爲它們的行爲類似於一些例子中的函數,但在其他情況下它們有很大的不同。

考慮以下幾點:

<?php 

    function _echo($a) 
    { 
     echo $a; 
    } 

    (1 > 0) ? _echo('true') : _echo('false'); 

?> 

此代碼將工作,因爲我們不再利用echo語言構造直接的,而是我們已經創建了一個包裝功能它。這個函數將被執行,PHP不再關心那個函數的內容,或者我們在那裏使用什麼語言結構。

通常,語言結構不能用於我的第二個示例的上下文中或您的for循環的上下文中。這種類型的語法只對函數和方法有效(這就是爲什麼print有效,而echo不能)。

相關問題