php中switch語句的用法介紹
來源:程序員人生 發(fā)布時(shí)間:2014-03-28 00:07:03 閱讀次數(shù):2801次
本文章詳細(xì)的介紹了switch語句在php中用法,以及switch case在條件為0時(shí)的處理辦法,有需要了解的同學(xué)可以參考一下.
Switch 語句
如果您希望有選擇地執(zhí)行若干代碼塊之一,請(qǐng)使用 Switch 語句.
使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊.
實(shí)例代碼如下:
- switch (expression)
- {
- case label1:
- code to be executed if expression = label1;
- break;
- case label2:
- code to be executed if expression = label2;
- break;
- default:
- code to be executed
- if expression is different
- from both label1 and label2;
- }
實(shí)例
工作原理:
對(duì)表達(dá)式(通常是變量)進(jìn)行一次計(jì)算
把表達(dá)式的值與結(jié)構(gòu)中 case 的值進(jìn)行比較
如果存在匹配,則執(zhí)行與 case 關(guān)聯(lián)的代碼
代碼執(zhí)行后,break 語句阻止代碼跳入下一個(gè) case 中繼續(xù)執(zhí)行
如果沒有 case 為真,則使用 default 語句
實(shí)例代碼如下:
- switch ($cps_sign) {
- case 'yiqifa':
- case 'chengguo':
- case 'roiyiqifa':
- case 'lkt':
- case 'fanli':
- case 'qqfanli':
- case 'weiyi':
- case 'yoyi':
- $sql = "INSERT into sa_cps_list (`uv`,`s_time`,`cps`,`url`) VALUES ('{$uv}',{$timestamp},'{$cps_sign}','{$url}')";
- echo $sql;exit();
- mysql_query($sql);
- break;
- default:
- break;
- }
仔細(xì)看了一下程序,莫非是switch和case惹的禍?于是,寫DEMO檢測(cè).
//輸出結(jié)果為:bool(true) bool(false) xxx
實(shí)例代碼如下:
- var_dump(""==0);
- var_dump(""===0);
- $errid = '';
- switch ($errid) {
- case 0 :
- echo "xxx";
- break;
- default:
- echo "yyy";
- }
真相大白了,原來 switch/case結(jié)構(gòu)中,比較case值用的是==而不是===.這樣,空就和0相等了,我收到的結(jié)果也當(dāng)然就是錯(cuò)誤的了.
沒辦法,程序不想改,畢竟多條件的時(shí)候switch/case要比一堆if讓人看著舒心.想辦法吧.呵呵.
實(shí)例代碼如下:
- $result = '';
- if(is_numeric($err_id) === false) {
- $result .= '宕機(jī)或超時(shí),沒有返回值';
- return $result;
- }
- switch ($err_id) {
- case xxx :
- ..........
- }
問題解決了,先判斷一下返回值是否是數(shù)值,如果不是數(shù)值的話,直接return.
以后寫switch/case判斷數(shù)字的時(shí)候一定要小心,尤其是有0這個(gè)敗家值存在的時(shí)候
switch 語句和 elseif 語句的比較
在switch 語句中,條件只求一次,然后和每個(gè) case 比較,而在 elseif 語句中,條件會(huì)再次求值.如果你的條件比較復(fù)雜,或者是多次循環(huán),用 switch 語句速度會(huì)更加快些
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)