差異處
這裏顯示兩個版本的差異處。
兩邊的前次修訂版 前次修改 下次修改 | 前次修改 | ||
tech:mantis_coding [2009/03/03 01:04] – jonathan | tech:mantis_coding [2015/10/08 13:09] (目前版本) – [- 程式碼編輯工具應該有的特點] jonathan | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== php 程式碼撰寫標準規則 ====== | ||
+ | * 主要參考的 Mantis 程式碼撰寫標準網址 : http:// | ||
+ | ===== - 變數命名規則 ===== | ||
+ | * 變數名稱完全採用小寫英文字母. | ||
+ | * 字與字之間使用 _ 來連接, 例如. $green_color_value | ||
+ | * 要使用描述性的命名方式 (迴圈變數可以例外). | ||
+ | * 迴圈變數通常使用: | ||
+ | * 計算性的變數($bug 的總數)應以被計算的變數名稱($bug)後面接 _count 的格式來命名, | ||
+ | * 全域性的變數前面應該加上 g_ | ||
+ | * 存放 session 的變數前面應該加上 sess_ | ||
+ | * 存放 cookie 的變數前面應該加上 cookie_ | ||
+ | * 臨時(temp)的變數前面應該加上 t_ | ||
+ | * 由網頁表單傳過來的參數和變數如果已經確認不含 SQL 特殊字元(例如 /) 前面應該加上 c_ | ||
+ | * 由網頁表單傳過來的函式參數如果不確認是否含 SQL 特殊字元(例如 /), 那前面應該加上 p_ | ||
+ | * 由網頁表單傳過來的變數如果不確認是否含 SQL 特殊字元(例如 /), 那前面應該加上 f_ | ||
+ | * 其他的變數前面應該加上 v_, v2_, ...等等. | ||
+ | * 為了避免視覺上的混淆, | ||
+ | * $query 和 $result 這兩個變數只能用在 SQL 的查詢語法變數($query)與查詢結果變數($result) | ||
+ | |||
+ | |||
+ | ===== - 常數命名規則 ===== | ||
+ | * 常數名稱完全採用大寫英文字母. | ||
+ | * 字與字之間使用 _ 來連接, 例如. ROOT_PATH | ||
+ | * 全域性的常數前面應該加上 G_ | ||
+ | * 如果內容有可能會改變(例如在管理介面提供更改設定內容值), | ||
+ | |||
+ | |||
+ | ===== - 函式(Functions)命名規則 ===== | ||
+ | |||
+ | * 函式名稱完全採用小寫英文字母. | ||
+ | * 字與字之間使用 _ 來連接, 例如. setup_page_breaks() | ||
+ | * 函式名稱不應該超過五個有意義的英文字, | ||
+ | * 列印功能的函式前面應該要加上 print_, 例如. print_page() | ||
+ | * 要儘量將功能有相關的函式加上相同的前置文字(可容易看出是相同群組的函式) 例如. email_, news_, ... 等等. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - Classes 命名規則 ===== | ||
+ | |||
+ | * 要採用 FirstLetterOfWordIsCaptilized 的樣式 | ||
+ | * 屬於 class 物件內的變數, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - 檔案命名規則 ===== | ||
+ | |||
+ | * 檔案名稱完全採用小寫英文字母. | ||
+ | * 字與字之間使用 _ 來連接, 例如. view_new_bugs_page.php | ||
+ | * 要使用 .php 當副檔名 | ||
+ | * 檔名長度必須小於 32 個字元. 這樣才能相容一些較舊的檔案系統像是 Mac OS. | ||
+ | * 會被 Included 的檔案在檔名後面必須是 _inc.php | ||
+ | * 預設的參數檔案在檔名後面加上 .default 例如. config_inc.php.default | ||
+ | |||
+ | |||
+ | ===== - SQL 格式 ===== | ||
+ | |||
+ | * 所有 SQL 的關鍵字必須採用大寫英文字母: | ||
+ | <code php> | ||
+ | $query = " | ||
+ | FROM $g_mantis_bug_table | ||
+ | WHERE id=' | ||
+ | </ | ||
+ | * 要以 $query 這特殊變數來存放 SQL 的命令. 這樣當發生錯誤時可以很容易找出問題的地方. | ||
+ | * SQL 的寫法要分行, | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - 一般通用格式 ===== | ||
+ | |||
+ | * 使用 TABS 來分出層次 | ||
+ | <code php> | ||
+ | : | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | < | ||
+ | : | ||
+ | </ | ||
+ | * 在 php 程式碼前後要以 <?php ?> 這樣式來撰寫 | ||
+ | <code php> | ||
+ | : | ||
+ | <?php require_once( ' | ||
+ | <?php auth_ensure_user_authenticated() ?> | ||
+ | <?php | ||
+ | $f_type = gpc_get_int( ' | ||
+ | : | ||
+ | ?> | ||
+ | </ | ||
+ | * 儘量不要直接在程式碼內印出(print/ | ||
+ | * 不要使用 EOF 這有意義的字當結構標籤(aaa EOF bbb : 以 EOF 來當判別區別資料項)((對 EOF Construct 如果有比較好的翻譯或解釋請在告訴我..)) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - 其他 ===== | ||
+ | |||
+ | * 不要使用 ?: 當結構標籤, | ||
+ | * 避免使用 magic numbers. 所使用的 magic numbers 應該只有 1 和 0 而且是出現在很容易理解的地方. | ||
+ | |||
+ | |||
+ | |||
+ | ===== - 頁面標準 ===== | ||
+ | |||
+ | * 版權說明應該是要放在程式碼最上方(這部分應該包含版本相關資訊) | ||
+ | <code php> | ||
+ | <?php | ||
+ | # 專案代號 - 專案名稱 | ||
+ | # Copyright (C) 2002 - 2005 專案負責人 - 聯絡 E-Mail | ||
+ | # This program is distributed under the terms and conditions of the GPL <- 採用的版權方式 | ||
+ | # See the README and LICENSE files for details | ||
+ | |||
+ | # -------------------------------------------------------- | ||
+ | # $Id: 檔案名稱, | ||
+ | # -------------------------------------------------------- | ||
+ | ?> | ||
+ | |||
+ | 例如 : | ||
+ | |||
+ | <?php | ||
+ | # viaDocExg - 公文電子交換系統 | ||
+ | # Copyright (C) 2006 - 2007 Jonathan Tsai - [email protected] | ||
+ | # This program is distributed under the terms and conditions of the GPL | ||
+ | # See the README and LICENSE files for details | ||
+ | |||
+ | # -------------------------------------------------------- | ||
+ | # $Id: main.php,v 1.00 2007/1/02 上午 12:07 jonathan Exp $ | ||
+ | # -------------------------------------------------------- | ||
+ | ?> | ||
+ | |||
+ | </ | ||
+ | * print_ 這樣的函式應該是出現在最底下((原則上如果是 HTML, 應該是呼叫 smarty 的 display() )) | ||
+ | |||
+ | |||
+ | ===== - 大括號和小括號 ===== | ||
+ | |||
+ | * 函式右邊應該緊接著小括號, | ||
+ | * 系統保留字(if, | ||
+ | * 陣列括號與裡面的索引變數間不應該出現空格, | ||
+ | * 使用大括號的格式請參考以下實例說明, | ||
+ | <code php> | ||
+ | for (...) { | ||
+ | blah | ||
+ | } | ||
+ | |||
+ | 或 | ||
+ | |||
+ | if (...) { | ||
+ | blah | ||
+ | } | ||
+ | </ | ||
+ | * if ... else 應該要如以下的格式: | ||
+ | <code php> | ||
+ | if (...) { | ||
+ | blah1 | ||
+ | } else { | ||
+ | blah2 | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== - 邏輯運算與判別式 ===== | ||
+ | |||
+ | * NOT 這運算元(!)應該要緊接在變數前面, | ||
+ | * 要擅用括號的好處, | ||
+ | |||
+ | |||
+ | ===== - 字串 ===== | ||
+ | |||
+ | * 字串相連之間要留空白字元, | ||
+ | * 如果沒有特殊的狀況, | ||
+ | |||
+ | |||
+ | ===== - 註解 ===== | ||
+ | |||
+ | * 以 # 這個符號來當註解開頭, | ||
+ | * 使用 /* */ 來標註整個註解區塊. 一般而言, | ||
+ | * 使用 @@@ 來標示簡短的訊息, | ||
+ | |||
+ | <code php> | ||
+ | : | ||
+ | $t_setting_arr[' | ||
+ | $t_custom_fields = custom_field_get_ids(); | ||
+ | $t_custom_fields_data = array(); | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== - 程式碼編輯工具應該有的特點 ===== | ||
+ | |||
+ | * 要能在多個檔案中同時對字串搜尋與取代功能 | ||
+ | * 能直接跳到指定的行號處 | ||
+ | * 對程式語法能夠區分出來(函式, | ||
+ | * 能夠依據 TAB 來對齊 | ||
+ | * 推薦使用 [[http:// | ||
+ | * 如果沒有特殊狀況, | ||
+ | |||
+ | |||
+ | {{tag> |