作者kerash (K.T)
看板PHP
標題Re: [請益] ? 和 & 的問題
時間Thu Aug 2 15:08:06 2012
用回文比較好解釋
※ 引述《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
1F:→ Kelunyang:好像學名叫輟 三元運算式,善用的話應該可以減少程式碼 08/04 00:24
2F:→ kerash:是三元運算式沒錯,不過我沒在記XD,這種方式可以把很多個 08/04 01:08
3F:→ kerash:判斷式組在一起,長度差很多,只是這樣維護也蠻累的@@ 08/04 01:08
4F:→ MOONRAKER:ternatary operators,相對於unary/binary ops 08/05 19:57
5F:→ MOONRAKER:我認為這只該在明確的條件賦值(conditional assigment) 08/05 19:58
6F:→ MOONRAKER:敘述中使用,也就是只有if ($c) $x=$a; else $x=$b; 08/05 19:59
7F:→ MOONRAKER:這麼簡單的敘述才適合用 ? : 縮寫。複雜度在此以上,都 08/05 20:00
8F:→ MOONRAKER:是在整人,尤以巢狀 ? : 敘述為超級整人專家。那種東西 08/05 20:02
9F:→ MOONRAKER:不展開成if elseif else或switch,除了變態沒啥好講的。 08/05 20:02
10F:→ kerash:通常會這樣做都是已經完整寫好的 module 或 擴充,如果是在 08/05 22:20
11F:→ kerash:正常的程式下如果會常常更新確實很少用。 08/05 22:23
12F:→ kerash:但也不是沒有這樣用,jquery也是有使用兩層或三層的判斷 08/05 22:24
13F:→ kerash:但是他也切得很細,每個功能的判斷有分開,才沒有這種狀況 08/05 22:24
14F:→ MOONRAKER:最近在hack一個js comp叫做tinytable,他不但不用jquery 08/06 00:15
15F:→ MOONRAKER:而且裡面充滿這種兩三層 ? : 的整人寫法。我記得他有一 08/06 00:16
16F:→ MOONRAKER:段是照各欄位格式字元叫用的formatter輸出格式化數字 08/06 00:18
17F:→ MOONRAKER:裡面就這樣: s=c=='f'?n.fpoint(k):c=='c'?n.money(k): 08/06 00:19
18F:→ MOONRAKER:這樣一直下去,就算用了pretty print還是很難讀。 08/06 00:20
19F:→ MOONRAKER:老實講我很懷疑這樣寫,比起老實寫一群if..elseif..else 08/06 00:20
20F:→ MOONRAKER:會快多少?現在有js compressor好用,主要browser的js也 08/06 00:22
21F:→ MOONRAKER:都很快了,寫這樣大概只有心理作用和降低維護性的效果 08/06 00:23
22F:→ kerash:他本來就沒要快吧XD,就是除了短的地方方便以外,讓程式碼 08/06 09:08
23F:→ kerash:也短一點而已,當然是要大量才壓的了很多就是了˙3˙ 08/06 09:09