print不是函數

2020-07-16 10:05:39

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

if (print("1n") && print("2n") && print("3n") && print("4n")) {
    ;
}

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

實際上的輸出是:

4
111

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

expr :
   T_PRINT expr
 | '(' expr ')'
;
所以其實上面的程式碼在php看來是:
if (print ("1n" && print ("2n" && print ("3n" && print "4n")))) {
  ;
}

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

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

if ((print "1n") && (print "2n") && (print "3n") && (print "4n")) {
    ;
}

以上就是print不是函數的詳細內容,更多請關注TW511.COM其它相關文章!