Re: [請益] ? 和 & 的問題

看板PHP作者 (K.T)時間12年前 (2012/08/02 15:08), 編輯推噓0(0023)
留言23則, 3人參與, 最新討論串2/3 (看更多)
用回文比較好解釋 ※ 引述《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

08/04 00:24, , 1F
好像學名叫輟 三元運算式,善用的話應該可以減少程式碼
08/04 00:24, 1F

08/04 01:08, , 2F
是三元運算式沒錯,不過我沒在記XD,這種方式可以把很多個
08/04 01:08, 2F

08/04 01:08, , 3F
判斷式組在一起,長度差很多,只是這樣維護也蠻累的@@
08/04 01:08, 3F

08/05 19:57, , 4F
ternatary operators,相對於unary/binary ops
08/05 19:57, 4F

08/05 19:58, , 5F
我認為這只該在明確的條件賦值(conditional assigment)
08/05 19:58, 5F

08/05 19:59, , 6F
敘述中使用,也就是只有if ($c) $x=$a; else $x=$b;
08/05 19:59, 6F

08/05 20:00, , 7F
這麼簡單的敘述才適合用 ? : 縮寫。複雜度在此以上,都
08/05 20:00, 7F

08/05 20:02, , 8F
是在整人,尤以巢狀 ? : 敘述為超級整人專家。那種東西
08/05 20:02, 8F

08/05 20:02, , 9F
不展開成if elseif else或switch,除了變態沒啥好講的。
08/05 20:02, 9F

08/05 22:20, , 10F
通常會這樣做都是已經完整寫好的 module 或 擴充,如果是在
08/05 22:20, 10F

08/05 22:23, , 11F
正常的程式下如果會常常更新確實很少用。
08/05 22:23, 11F

08/05 22:24, , 12F
但也不是沒有這樣用,jquery也是有使用兩層或三層的判斷
08/05 22:24, 12F

08/05 22:24, , 13F
但是他也切得很細,每個功能的判斷有分開,才沒有這種狀況
08/05 22:24, 13F

08/06 00:15, , 14F
最近在hack一個js comp叫做tinytable,他不但不用jquery
08/06 00:15, 14F

08/06 00:16, , 15F
而且裡面充滿這種兩三層 ? : 的整人寫法。我記得他有一
08/06 00:16, 15F

08/06 00:18, , 16F
段是照各欄位格式字元叫用的formatter輸出格式化數字
08/06 00:18, 16F

08/06 00:19, , 17F
裡面就這樣: s=c=='f'?n.fpoint(k):c=='c'?n.money(k):
08/06 00:19, 17F

08/06 00:20, , 18F
這樣一直下去,就算用了pretty print還是很難讀。
08/06 00:20, 18F

08/06 00:20, , 19F
老實講我很懷疑這樣寫,比起老實寫一群if..elseif..else
08/06 00:20, 19F

08/06 00:22, , 20F
會快多少?現在有js compressor好用,主要browser的js也
08/06 00:22, 20F

08/06 00:23, , 21F
都很快了,寫這樣大概只有心理作用和降低維護性的效果
08/06 00:23, 21F

08/06 09:08, , 22F
他本來就沒要快吧XD,就是除了短的地方方便以外,讓程式碼
08/06 09:08, 22F

08/06 09:09, , 23F
也短一點而已,當然是要大量才壓的了很多就是了˙3˙
08/06 09:09, 23F
文章代碼(AID): #1G6YTPDQ (PHP)
討論串 (同標題文章)
文章代碼(AID): #1G6YTPDQ (PHP)