看板 PHP 關於我們 聯絡資訊
用回文比較好解釋 ※ 引述《kg3363 (深藍)》之銘言: : 請教一下板上的高手們,以下這段程式碼的 ? 和 & 要如何解釋~ : 麻煩各位了,謝謝~ : $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 這個屬於 if else 的簡寫法,首先要知道這點 ex: if(val==1) { echo "xxx"; } else { echo "ooo"; } 可以寫成 echo (val==1) ? "xxx" : "ooo" 因此以你這個範例而言 其中沒被引號框住的 ? 跟 : $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?"; 是屬於判斷式的符號。 即是前者判斷式成立時,會輸出問號後面的值,反則輸出冒號後面的值 而前面的判斷式是 strpos($updateGoTo, '?') ,而strpos 有兩種回傳情況, 一種是 === FALSE 就是完全沒找到,另一則為目標字元的 position 因此整句的意思可以是如下 if(strpos($updateGoTo, '?')!==FALSE) { $updateGoTo .= "&"; } else { $updateGoTo .= "?"; } 以上 -- [There's no undo in your life]                          ●~   ●~ ●~   ●~ ●~   ●~ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.186.193
Kelunyang:好像學名叫輟 三元運算式,善用的話應該可以減少程式碼 08/04 00:24
kerash:是三元運算式沒錯,不過我沒在記XD,這種方式可以把很多個 08/04 01:08
kerash:判斷式組在一起,長度差很多,只是這樣維護也蠻累的@@ 08/04 01:08
MOONRAKER:ternatary operators,相對於unary/binary ops 08/05 19:57
MOONRAKER:我認為這只該在明確的條件賦值(conditional assigment) 08/05 19:58
MOONRAKER:敘述中使用,也就是只有if ($c) $x=$a; else $x=$b; 08/05 19:59
MOONRAKER:這麼簡單的敘述才適合用 ? : 縮寫。複雜度在此以上,都 08/05 20:00
MOONRAKER:是在整人,尤以巢狀 ? : 敘述為超級整人專家。那種東西 08/05 20:02
MOONRAKER:不展開成if elseif else或switch,除了變態沒啥好講的。 08/05 20:02
kerash:通常會這樣做都是已經完整寫好的 module 或 擴充,如果是在 08/05 22:20
kerash:正常的程式下如果會常常更新確實很少用。 08/05 22:23
kerash:但也不是沒有這樣用,jquery也是有使用兩層或三層的判斷 08/05 22:24
kerash:但是他也切得很細,每個功能的判斷有分開,才沒有這種狀況 08/05 22:24
MOONRAKER:最近在hack一個js comp叫做tinytable,他不但不用jquery 08/06 00:15
MOONRAKER:而且裡面充滿這種兩三層 ? : 的整人寫法。我記得他有一 08/06 00:16
MOONRAKER:段是照各欄位格式字元叫用的formatter輸出格式化數字 08/06 00:18
MOONRAKER:裡面就這樣: s=c=='f'?n.fpoint(k):c=='c'?n.money(k): 08/06 00:19
MOONRAKER:這樣一直下去,就算用了pretty print還是很難讀。 08/06 00:20
MOONRAKER:老實講我很懷疑這樣寫,比起老實寫一群if..elseif..else 08/06 00:20
MOONRAKER:會快多少?現在有js compressor好用,主要browser的js也 08/06 00:22
MOONRAKER:都很快了,寫這樣大概只有心理作用和降低維護性的效果 08/06 00:23
kerash:他本來就沒要快吧XD,就是除了短的地方方便以外,讓程式碼 08/06 09:08
kerash:也短一點而已,當然是要大量才壓的了很多就是了˙3˙ 08/06 09:09