之前釋出了一篇關於我的
行車服務
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