print不是函數

藏色散人
發布: 2023-04-06 20:14:01
轉載
2467 人瀏覽過

print不是函數

這個源自於一個看似很詭異的問題:

if (print("1\n") && print("2\n") && print("3\n") && print("4\n")) {
    ;
}
登入後複製

你期待這段程式碼輸出什麼呢?

實際上的輸出是:

4
111
登入後複製

很多時候我們會忽略了print是一個語法結構(language constructs), 他並不是一個函數, 參數的list並不要求有括號(即使你寫了括號, 括號也會在語法分析階段被忽略), 他只是一個永遠回傳結果是1的”表達式(expr)”:

expr :
   T_PRINT expr
 | '(' expr ')'
;
所以其实上面的代码在php看来是:
if (print ("1\n" && print ("2\n" && print ("3\n" && print "4\n")))) {
  ;
}
登入後複製

所以就是, 輸出4, 然後輸出“3\n” && print的結果1 , 然後輸出“2\n” && 1, 最後是“1\n” && 1

而如果想要達到上面程式碼的本身想要的意圖, 我們應該這麼寫:

if ((print "1\n") && (print "2\n") && (print "3\n") && (print "4\n")) {
    ;
}
登入後複製

以上是print不是函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:laruence.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板