本文章詳細的介紹了switch語句在php中用法,以及switch case在條件為0時的處理辦法,有需要了解的同學可以參考一下。
Switch 語句
如果您希望有選擇地執行若干代碼塊之一,請使用 Switch 語句。
使用 Switch 語句可以避免冗長的 if..elseif..else 代碼塊。語法:
- 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;
- }
實例
工作原理:
對表達式(通常是變量)進行一次計算
把表達式的值與結構中 case 的值進行比較
如果存在匹配,則執行與 case 關聯的代碼
代碼執行后,break 語句阻止代碼跳入下一個 case 中繼續執行
如果沒有 case 為真,則使用 default 語句
- 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;
- }
仔細看了一下程序,莫非是switch和case惹的禍?于是,寫DEMO檢測。
輸出結果為:bool(true) bool(false) xxx
- var_dump(""==0);
- var_dump(""===0);
- $errid = '';
- switch ($errid) {
- case 0 :
- echo "xxx";
- break;
- default:
- echo "yyy";
- }
真相大白了,原來 switch/case結構中,比較case值用的是==而不是===。這樣,空就和0相等了,我收到的結果也當然就是錯誤的了。
沒辦法,程序不想改,畢竟多條件的時候switch/case要比一堆if讓人看著舒心。想辦法吧。呵呵。
- $result = '';
- if(is_numeric($err_id) === false) {
- $result .= '宕機或超時,沒有返回值';
- return $result;
- }
- switch ($err_id) {
- case xxx :
- ..........
- }
新聞熱點
疑難解答