2012-10-18 37 views
2

下面是一些奇怪的事情,我沒有得到打印行爲PHP

if (print("foo") || print("bar")) { 
    // "foo" has been printed. 
} 

爲什麼輸出爲1

請說明一下嗎?

+1

可能(非精確 - 丁 - close-enough)[奇怪的回聲,在PHP打印行爲?]的副本(http://stackoverflow.com/questions/3340330/strange-echo-print-behaviour-in-php) – Charles

回答

5

這是因爲PHP是一種荒謬的語言。 print不是一個正常的函數,它是一種語言結構。此線實際上解析爲:

if (print (("foo") || print("bar"))) 

("foo") || print("bar")而且是將計算得到1的表達式。布爾上下文中的字符串"foo"爲真,因此||運算符產生1

如果顯式括表達人們所期望的方式,要解析:

if ((print("foo")) || (print("bar"))) 

然後輸出你所期望的:

foo 
+0

底線是檢查返回'print'的值是無意義的。實際上,*給print返回值是無意義的。我的時間機器在哪裏?我需要回去和大錘的人。 – Charles

+0

'那麼||由於邏輯快捷方式,操作員可以得到1. * *不帶*打印「欄」。 –