「PHP」行車服務app後端程式碼簡析

halohily發表於2017-08-21

之前釋出了一篇關於我的行車服務appiOS端程式碼簡析的文章:文章地址。 此篇是對這個專案後端PHP程式碼的簡析。

iOS端程式碼地址: iOS程式碼PHP程式碼。如果你覺得有幫助,希望能夠點個Star,感謝~

筆者對於PHP學習也剛開始不久,所以此篇不敢妄言指導,只是把這個專案後端程式碼的結構、實現講述一遍,希望大家多多指教。
適合想要自己嘗試使用PHP搭建一個API專案的同學閱讀。

專案結構

  • 封裝好的公共檔案

    • helper/
    • 這個部分包括MySQL互動、JSON包裝函式、`返回結果函式。
  • 各個介面實現檔案

    • interface/
    • 這個部分是各個介面的實現檔案,由路由檔案按需呼叫。
  • 入口檔案,介面路由

    • receiver.php
    • 這個部分是整個專案的路由檔案,接收請求,然後分發給各個介面實現檔案。

程式碼實現

  • 公共檔案 helper/

    • common.php
      這個檔案封裝了兩個包裝返回結果的函式。
      • returnData ($msg, $code, $data)
        適用於獲取資料型別的介面,它帶有data引數。
        返回結果示例:
        {
          "msg": "ok",
          "code": "1",
          "data": {
              "count": "3",
              "points_list": [{
                  "id": "19",
                  "poi_name": "sss",
                  "poi_address": "sss",
                  "uid": "fuck",
                "points": "30"
              },
              {
                  "id": "25",
                  "poi_name": "洗車裝飾服務",
                  "poi_address": "北三環西路76號附近",
                  "uid": "B0FFHF5BKD",
                "points": "30"
              }]
          }
        }複製程式碼
      • returnMsg ($msg, $code)
        適用於僅返回狀態的介面。
        返回結果示例:
        {
          "msg": "新增成功",
          "code": "1"
        }複製程式碼
    • jsonHelper.php
      • arrayRecursive(&$array, $function, $apply_to_keys_also = false)函式作用是對陣列中的元素遞迴地進行傳入的$function操作。
      • JSON($array)函式用於將陣列包裝為JSON格式。
    • sqlHelper.php
      這個檔案中對所使用資料庫名稱、賬戶資訊等進行設定,大家可以按照自己的資訊自行在此配置。
  • 路由檔案receiver.php

    • 這個檔案是整個專案的呼叫入口,具體介面呼叫時的url示例即為:伺服器IP地址/DriverEpoch-Server/receiver.php
    • 本檔案解析引數中的if引數,然後分發到對應的介面檔案。
    • 例如,if=Login,即為呼叫登入介面,分發到登入介面的實現檔案:
      case "Login": require "interface/Login.php"; break;複製程式碼
  • 各個介面實現檔案interface/

    這部分我對於兩個型別各選取一個介面來講述一下。

    • 返回狀態型別:AddPlace
      • 這個介面用來為使用者新增歷史足跡。
      • 引數列表:
        • user_id: 使用者id
        • latitude:緯度
        • longitude:經度
        • place_name:地點名稱
        • place_address:地點地址
      • 很簡單,解析到POST方式傳入的各個引數之後,構建一條mysql語句,作用是向對應的表插入一條資料:
        $sql = "INSERT INTO historyPlaces (user_id, latitude, longitude, place_name, place_address) VALUES ('$user_id', '$latitude', '$longitude', '$place_name', '$place_address')";複製程式碼
      • 執行之後,若mysql表示執行成功,則返回JSON格式的成功資訊。否則返回失敗資訊,此處就要使用前文提到的封裝好的工具函式。
    • 返回狀態+資料型別:GetPlaces
      • 這個介面用於獲取使用者的所有歷史足跡。
      • 引數列表:
        • user_id:使用者id
      • 這種型別的介面比剛剛的稍微複雜一些。拿到引數後,構建一條查詢語句,查詢使用者的所有歷史遺蹟:
        $sql = "SELECT add_time,place_name,place_address FROM historyPlaces WHERE user_id = '$user_id' ORDER BY add_time";複製程式碼
      • 取到結果後,若結果條數為0,則返回結果條數為0的資訊。否則,將mysql返回結果的每一行都包裝成為陣列的一個元素,然後將陣列包裝為JSON,返回給客戶端。
        $places_list = null;
        $i = 0;
        $num = mysqli_num_rows($sqlResult);
        while($row = mysqli_fetch_array($sqlResult)) {
            $places_list[$i]['add_time'] = $row['add_time'];
            $places_list[$i]['place_name'] = $row['place_name'];
            $places_list[$i]['place_address'] = $row['place_address'];
            $i++;
            if ($i >= $num){
                break;
            }
        }
        $data['count'] = $i;
        $data['places_list'] = $places_list;
        returnData("ok", 1, $data);複製程式碼

其他介面的實現檔案大同小異,有一些具體的點大家可以和我繼續交流。

寫在最後:

  • PHP的語法非常簡單,我個人覺得不太需要刻意去看語法,有其他語言基礎的同學看幾份程式碼就可以上手寫,勇於嘗試,加油!
  • 我後續會再寫一篇關於自己部署LAMP架構的PHP專案的教程,希望能和前文形成一個自己DIY全端專案的教程。

專案已開源,如果覺得有用,希望點一下star~感謝~
halo

相關文章