爲什麼這是有效的:ECHO在FOR LOOP的第三個exp中不起作用,但PRINT可行嗎?
for ($i = 0; $i < 10; print $i++);
,這給語法錯誤:
for ($i = 0; $i < 10; echo $i++);
有什麼區別?兩者都是語言結構。 有沒有規則什麼是有效的,什麼不是?
爲什麼這是有效的:ECHO在FOR LOOP的第三個exp中不起作用,但PRINT可行嗎?
for ($i = 0; $i < 10; print $i++);
,這給語法錯誤:
for ($i = 0; $i < 10; echo $i++);
有什麼區別?兩者都是語言結構。 有沒有規則什麼是有效的,什麼不是?
你是對的,echo
和print
都是語言結構,但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
不能)。
可能的重複[在PHP中如何回顯和打印不同?](http://stackoverflow.com/questions/234241/how-are-echo-and-print-different-in-php) – We0