作者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