在資料驗證上也是一個接一個,但卻數量多的時候,卻會讓整體流程看起來很複雜,很不直覺。
一個基本 switch 的撰寫方法,用在代替有結構的 IF 時還蠻放便的。
- <?php
- switch ($_GET['type']) {
- // 當 $_GET['type']=="apple" 時進入程式片段
- case "apple":
- //程式片段...
- break;
- // 當 $_GET['type']=="bar" 時進入程式片段
- case "bar":
- //程式片段...
- break;
- // 當以上都不符合,預設進入程式片段
- default :
- //程式片段...
- break;
- }
- ?>
這個例子,將判斷式移到 case 上,讓原本的 switch 更加彈性,但這不是主要目的,在 switch 裡主要的好處是可以利用 break 跳出流程,這樣的用法跟 function 很像,利用跳出的方式結束剩下的程序,在區塊中檢查到錯誤的數入參數時,直接丟出訊息並讓輸出程序去處理顯示的問題。
- <?php
- switch (true){
- case ($_GET['type']=='view'):
- //其他判斷或動作...
- break;
- case ($_GET['action']=='delete'):
- //其他判斷或動作...
- break;
- case ($_GET['action']=='add'):
- //標題檢查
- $title=trim($_GET['title']);/*去除頭尾空白*/
- $title=htmlspecialchars($title,ENT_QUOTES);/*HTML 跳脫*/
- $title=mb_substr($title, 0, 100);/*100字剪裁*/
- if(!$title){ //利用 if 判斷,錯誤則跳出 switch
- // 列出錯誤訊息
- break;
- }
- //訊息檢查
- $msg=trim($_GET['msg']);/*去除頭尾空白*/
- $msg=htmlspecialchars($msg,ENT_QUOTES);/*HTML 跳脫*/
- $msg=mb_substr($msg, 0, 1000);/*1000字剪裁*/
- if(!$msg)){ //利用 if 判斷,錯誤則跳出 switch
- // 列出錯誤訊息
- break;
- }
- //其他判斷或動作...
- break;
- default :
- // 列出錯誤訊息
- break;
- }
- ?>
再看看如果用 IF 去處理輸入驗證時,必須將所有資料先做處理,後面再一個一個去判斷,在閱讀上很不直覺,如果中間有大量的輸入參數要處理時,會讓人找很久。
- <?php
- if($_GET['type']=='view'){
- //其他判斷或動作...
- }elseif($_GET['action']=='delete'){
- //其他判斷或動作...
- }elseif($_GET['action']=='add'){
- //標題檢查
- $title=trim($_GET['title']);/*去除頭尾空白*/
- $title=htmlspecialchars($title,ENT_QUOTES);/*HTML 跳脫*/
- $title = mb_substr($title, 0, 100);/*100字剪裁*/
- //訊息檢查
- $msg=trim($_GET['msg']);/*去除頭尾空白*/
- $msg=htmlspecialchars($msg,ENT_QUOTES);/*HTML 跳脫*/
- $msg = mb_substr($msg, 0, 1000);/*1000字剪裁*/
- if(!$title){
- // 列出錯誤訊息
- }elseif(!$msg){
- // 列出錯誤訊息
- }else{
- //其他判斷或動作...
- }
- break;
- }else{
- // 列出錯誤訊息
- }
- ?>
參考來源:
PHP: switch - Manual
0 回應:
張貼留言