web开发规则,代码规范 本文作者 李瑞豪修改时间 2019-08-15 21:26:20本文链接 https://lruihao.cn/posts/dev-rules/精神絕對不寫死程式不留不要用的、垃圾程式碼GitMaster 的 BUG 必須最少且趨近於零每次 Commit 訊息應該確實填寫不可模稜兩可禁止 Commit IDE 的 project data命名命名應根據內容做有意義的命名讓後續維護人員可以顧名思義!即使不會發生錯誤程式碼英文大小寫也需明確區分。語意類型命名規則說明屬性 (Attribute, Property)名詞user_name、userName方法 (Method, Function)動詞名詞getUserName、get_user_name常見的動詞有get、set、update、delete、remove字母與分隔語言變數 (Variable, Parameter, Argument)常數 (Constant)物件導向 - 類名 (Class Name)物件導向 - 成員 (mebmer)HTML、CSS全部小寫不同單字以「-」分隔user-idJavaScript首字小寫不同單字「首字以大寫」分隔userId全部大寫不同單字以「_」分隔MAX_COUNT首字大寫不同單字「首字以大寫」分隔一個檔案放一個 Class檔名即為 Class NameUser公有 (public) : 首字小寫不同單字「首字以大寫」分隔name, getName私有 (private): _公有命名規則_name, _getNamePHP全部小寫不同單字以「_」分隔user_idSQL由使用者定義的表名、欄位名全部小寫不同單字以「_」分隔SQL語法、函數全部大寫SELECT、INSERT INTO-通用程式碼撰寫每個函數應該註解註解應包含函數工能說明、引數說明。不必要的代碼不要寫也禁止放到註解裡面!if-else 的 {} 嚴禁省略。{} 起始一律跟在 前一個功能的尾巴禁止分行正確寫法public function test(){ //do something if($a $b){ //do something } }錯誤寫法public function test() { //do something if($a $b) { //do something } }程式碼排版任何程式碼應該以 2 個 space 為一個階層做好排版、不可使用 tab。函數 (Function, Methd)函數宣告時需在函數上方加上函數註解註解應包含函數說明、引數內容 (引數型態、引數英文名稱、引數說明)、 回傳值內容 (回傳值型態、回傳值說明)類 (Class)一個類 (Class) 的宣告只能存在一個檔案。類 (Class) 的宣告檔檔名必須為類名。其他連結本地任何其他資源 (圖片、檔案、網站) 皆使用相對路徑禁止使用絕對路徑非本地資源除外。HTML程式碼撰寫禁止在 HTML 使用style、script一律使用外部檔案引用方式引用 CSS、JavaScript檔案。HTML 標籤需成雙成對有頭有尾。區塊標籤tag/tag單標籤tag /禁止使用已被 HTML 捨棄的舊標籤、屬性如!-- html tag --centerfontbasefontsstrikeulistingplaintextxmp!-- html attribute --align bgcolor color資安禁止禁止使用 readonly 做為參數傳遞其他連結本地任何其他資源 (圖片、檔案、網站) 皆使用相對路徑禁止使用絕對路徑非本地資源除外。CSS程式碼撰寫CSS 的定義應該獨立一個 CSS 檔案禁止使用style或style屬性直接在 HTML 中定義樣式。JavaScript程式碼撰寫禁止使用 HTML 字串一律使用 Dom 產生 HTML禁止省略箭頭函數 (Arrow function) 的括弧正確a (a, b) { c; }錯誤 (這是允許的但造成程式碼閱讀困難故禁止)a c;註解JavaScript 註解應該遵循 JSDoc 的標準撰寫全域變數 (Global)/* global $t, Tiger */常數 (Constant)/** * 常數說明 * type {常數型態} */Example/** * 使用者ID * type {String} */ var userId Hello;函數、方法 (Function, Method)/** * 函數用途說明 * param {引數型態} 引數名稱 引數說明 * param {引數型態} [選擇性引數名稱] 引數說明 * param {引數型態} [選擇性引數名稱引數預設值] 引數說明 * returns {回傳值型態} 回傳值說明 */Example/** * 取得使用者 * param {Int} userId 使用者ID * param {Object} [options] 其他選項 * param {String} [options.querya] 查詢關鍵字 預設為 a * returns {Object} 使用者資料 */ var getUser function(userId, options){ //do something return user; };PHP前端參數取得參數取得需透過 filter_input 函數取得不得使用 $_GET、 $_POST輸出到前台參數命名必須為全部小寫不同單字以「_」分隔註解PHP 註解應該遵循 PHPDoc 的標準撰寫成員變數 (Member)成員變數只的是 Class 內的成員變數我們都會要求替成員變數增加註解說明。通常 Function 的變數除非太特別否則都不需要特別註解說明。/** * 成員變數說明 * type {型態} */Example/** * 使用者ID * type {String} */ $userId Hello;函數、方法 (Function, Method)/** * 函數用途說明 * param 引數型態 引數名稱 引數說明 * option 引數選項型態 引數選項名稱 引數選項說明 * uses 全域變數 全域變數說明 * returns 回傳值型態 回傳值說明 */Example/** * 取得使用者 * param int userId 使用者ID * param object options 其他選項 * option string options[query] 查詢關鍵字 * uses $_POST[role_id] 從前端以POST取得角色ID * returns object 使用者資料 */ function getUser($userId, $options){ //do something return $user; };Database禁止使用 Table Join。禁止使用 Oracle Trigger。禁止將查詢資料庫的 SQL 放在迴圈中查詢SQL 撰寫屬於 SQL 語法使用大寫 (SELECT, WHERE, INSERT etc…)屬於使用者自己定義的使用小寫 (表名 table name, 欄位名 column name etc…)表名、欄位名前後需加上 ExampleINSERT INTO user VALUES(a, b);統一用詞僅為舉例不限與此。用詞統一最后最後關閉取消存儲保存修改儲存搜尋查詢

本月热点