2010-11-09 51 views
3

兩個函數調用之間的&符號是做什麼的?注意:這是外部的任何if語句或case語句函數調用之間的兩個&符號

像這樣:

functionCallOne() && functionCallTwo(); 
+0

這可能是一種有效的節省空間的措施,但IMO對清晰度有不利影響。未經授權的觀察者可能很容易認爲一個大的粗體AND運算符會調用函數1和函數2。在一個美好的一天,不是function1,然後可能是function2。當然,程序員確實喜歡爲了他們自己的利益而過於聰明! – thesunneversets 2010-11-10 00:08:36

+0

@thesunneversets,這比您想象的更常見,並且在shell腳本等其他語言中使用。 – matpie 2010-11-10 00:12:53

+2

我確信它有很好的和有效的用途。這個問題最受歡迎(並且被接受)的答案只是將其目的描述爲「僅佔用一條線」。較短的代碼本身並不總是更好的代碼。 – thesunneversets 2010-11-10 00:49:44

回答

5

它相當於

if (functionCallOne()) { 
    functionCallTwo(); 
} 

它只是使用的短路,使這個3襯墊只佔用一個線

5

即短路AND運算符,這意味着該第二功能(或表達/語句)將只如果所評估的首先返回true。

0

如果第一個函數返回false,則第二個函數(帶有所有它的副作用)甚至不會執行,因爲PHP知道如果其中一個函數是false,則整個表達式永遠不會是true

+0

你是什麼意思,「所有的副作用」? – matpie 2010-11-10 00:13:52

+0

如果function_b()具有其他返回值的副作用,那麼只寫'function_a()&& function_b();'。 – AndreKR 2010-11-10 00:18:21

0

的邏輯AND運算符&&是短路操作。這意味着如果第一個操作數是true,它將繼續檢查第二個操作數。如果第一個操作數是false,則整個表達式只能是false,所以檢查第二個操作數沒有意義,所以它短路沒有檢查第二個操作數就沒有操作。

在這種情況下,此特性用於表示「執行functionCallOne,如果該操作成功執行functionCallTwo」。