版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、整理了一份比較全面的PHP開發(fā)編碼規(guī)范.目錄1 編寫目的2 整體要求3 安全規(guī)范3.1 包含文件3.1.1 命名規(guī)則3.1.2 存放規(guī)則3.2 安全規(guī)則3.3 一些針對PHP的規(guī)則3.4 其它處理規(guī)則3.4.1 對輸入?yún)?shù)值進(jìn)行轉(zhuǎn)義處理3.4.2 操作大HTML文本4 編碼規(guī)范4.1 命名規(guī)范4.1.1 變量命名4.1.2 類4.1.3 方法或函數(shù)4.1.4 縮寫詞4.1.5 數(shù)據(jù)庫表名4.1.6 數(shù)據(jù)庫字段4.2 書寫規(guī)則4.2.1 代碼縮進(jìn)4.2.2 大括號 書寫規(guī)則4.2.3 小括號( )和函數(shù)、關(guān)鍵詞等4.2.4 符號書寫4.2.5 if else swith for while等書寫
2、4.2.6 類的構(gòu)造函數(shù)4.2.7 語句斷行, 每行控制在80個字符以內(nèi)4.2.8 不要不可思議的數(shù)字4.2.9 true/false和0/1判斷4.2.10 避免嵌入式賦值4.2.11 錯誤返回檢測規(guī)則4.3 程序注釋4.3.1 程序頭注釋塊4.3.2 類的注釋4.3.3 函數(shù)和方法的注釋4.3.4 變量或者語句注釋4.4 其他規(guī)范(建議)4.4.1 php代碼標(biāo)記4.4.2 程序文件名、目錄名4.4.3 PHP項目通常的文件目錄結(jié)構(gòu)4.4.4 PHP和HTML代碼的分離問題4.4.5 PHP項目開發(fā)中的程序邏輯結(jié)構(gòu)5 特定環(huán)境下PHP編碼特殊規(guī)范5.1 變量定義5.2 引用的使用5.3 變
3、量的輸入輸出1 編寫目的為了更好的提高技術(shù)部的工作效率,保證開發(fā)的有效性和合理性,并可最大程度的提高程序代碼的可讀性和可重復(fù)利用性,指定此規(guī)范。開發(fā)團(tuán)隊根據(jù)自己的實際情況,可以對本規(guī)范進(jìn)行補(bǔ)充或裁減。2 整體要求技術(shù)部php開發(fā)規(guī)范將參照PEAR的規(guī)范,基本采用PEAR指定的規(guī)范,在其基礎(chǔ)上增加、修改或刪除部分適合具體開發(fā)環(huán)境的規(guī)范。本規(guī)范只針對PHP開發(fā)過程中編碼的規(guī)范,對于PHP開發(fā)項目中文件、目錄、數(shù)據(jù)庫等方面的規(guī)范,將不重點涉及。本規(guī)范包含了PHP開發(fā)時程序編碼中命名規(guī)范、代碼縮進(jìn)規(guī)則、控制結(jié)構(gòu)、函數(shù)調(diào)用、函數(shù)定義、注釋、包含代碼、PHP標(biāo)記、文件頭的注釋塊、CVS標(biāo)記、URL樣例、常
4、量命名等方面的規(guī)則。3 安全規(guī)范3.1 包含文件3.1.1 命名規(guī)則提取出來具有通用函數(shù)的包含文件,文件后綴以.inc來命名,表明這是一個包含文件。如果有多個.inc文件需要包含多頁面,請把所有.inc文件封裝在一個文件里面,具體到頁面只需要包換一個.inc文件就可以了如:xxx_session.incxxx_comm.incxxx_setting.incmysql_db.inc把以上文件以一下方式,封裝在xxx.basic.inc文件里面require_once(”xxx_session.inc”);require_once(”xxx_comm.inc”);require_once(”xxx
5、_setting.inc”);require_once(”mysql_db.inc”);注:是否需要封裝到一個文件,視情況而定,如果每個inc的功能是分散到不同的頁面使用的話,就不建議封裝。3.1.2 存放規(guī)則一般包含文件不需要直接暴露給用戶,所以應(yīng)該放在 Web Server訪問不到的目錄,避免因為配置問題而泄露設(shè)置信息。3.2 安全規(guī)則請參考產(chǎn)品安全檢查表。輸入和輸出檢查是否做了HTML代碼的過濾可能出現(xiàn)的問題:如果有人輸入惡意的HTML代碼,會導(dǎo)致竊取cookie, 產(chǎn)生惡意登錄表單,和破壞網(wǎng)站檢查變量做數(shù)據(jù)庫操作之前是否做了escape可能出現(xiàn)的問題:如果一個要寫入查詢語句的字符串變量
6、包含了某些特殊的字符,比如引號( ,”)或者分號(;) 可能造成執(zhí)行了預(yù)期之外的操作。建議采用的方法:使用mysql_escape_string() 或?qū)崿F(xiàn)類似功能的函數(shù)。檢查輸入數(shù)值的合法性可能出現(xiàn)的問題:異常的數(shù)值會造成問題。如果對輸入的數(shù)值不做檢查會造成不合法的或者錯誤的數(shù)據(jù)存入UDB、存入其它的數(shù)據(jù)庫或者導(dǎo)致意料之外的程序操作發(fā)生。舉例:如果程序以用戶輸入的參數(shù)值做為文件名,進(jìn)行文件操作,惡意輸入系統(tǒng)文件名會造成系統(tǒng)損毀。核實對cookie的使用以及對用戶數(shù)據(jù)的處理可能出現(xiàn)的問題:不正確的cookie使用可能造成用戶數(shù)據(jù)泄漏訪問控制對內(nèi)部使用的產(chǎn)品或者供合作方使用的產(chǎn)品,要考慮增加訪問
7、控制logs確保用戶的保密信息沒有記在log中(例如:用戶的密碼)確保對關(guān)鍵的用戶操作保存了完整的用戶訪問記錄https對敏感數(shù)據(jù)的傳輸要采用https3.3 一些針對PHP的規(guī)則設(shè)置 register_globals = off (Y!PHP 已經(jīng)禁止了register_globals,如果你使用Y!PHP可以不考慮這項設(shè)置)設(shè)置 error_reporting = E_ALL (Y!PHP 的缺省設(shè)置),并且要修正所有的error和warning將實際的操作放在被引用的文件中。把引用文件放到不可以被直接瀏覽的目錄下3.4 其它處理規(guī)則3.4.1 對輸入?yún)?shù)值進(jìn)行轉(zhuǎn)義處理頁面接到參數(shù)需要SQ
8、L操作,這時候需要做轉(zhuǎn)義,尤其需要注意”;”。如:$a = ” Lets go ” ;$sql = “Insert into tmp(col) values($a)” ;這種情況出現(xiàn)錯誤的不確定性。3.4.2 操作大HTML文本很多時候需要存放一大段HTML文本供頁面使用,象用戶定制頁頭頁腳等。需要剔除腳本標(biāo)記,避免執(zhí)行惡意php代碼。轉(zhuǎn)換”“號,保證代碼完整。4 編碼規(guī)范4.1 命名規(guī)范制定統(tǒng)一的命名規(guī)范對于項目開發(fā)來說非常重要,不但可以養(yǎng)成程序員一個良好的開發(fā)習(xí)慣,還能增加程序的可讀性、可移植性和可重用性,還能很好的提高項目開發(fā)的效率。4.1.1 變量命名變量命名分為普通變量、靜態(tài)變量、局
9、部變量、全局變量、Session變量等方面的命名規(guī)則。 普通變量普通變量命名遵循以下規(guī)則:a 所有字母都使用小寫;b 對于一個變量使用多個單詞的,使用_作為每個詞的間隔。例如:$base_dir、$red_rose_price等 靜態(tài)變量靜態(tài)變量命名遵循以下規(guī)則:a 靜態(tài)變量使用小寫的s_開頭;b 靜態(tài)變量所有字母都使用小寫;c 多個單詞組成的變量名使用_作為每個詞的間隔。例子:$s_base_dir、$s_red_rose_prise等。 局部變量局部變量命名遵循以下規(guī)則:a 所有字母使用小寫;b 變量使用_開頭;c 多個單詞組成的局部變量名使用_作
10、為每個詞間的間隔。例子:$_base_dir、$_red_rose_price等。 全局變量全局變量應(yīng)該帶前綴g,知道一個變量的作用域是非常重要的。例如global $gLOG_LEVEL;global $gLOG_PATH; 全局常量全局變量命名遵循以下規(guī)則:a 所有字母使用大寫b 全局變量多個單詞間使用_作為間隔。例子:$BASE_DIR、$RED_ROSE_PRICE等。 session變量session變量命名遵循以下規(guī)則:a 所有字母使用大寫;b session變量名使用S_開頭;c 多個單詞間使用_間隔。例子:$S_BASE_DIR、$S_
11、RED_ROSE_PRICE等。4.1.2 類php中類命名遵循以下規(guī)則:a 以大寫字母開頭;b 多個單詞組成的變量名,單詞之間不用間隔,各個單詞首字母大寫。例子:class MyClass 或class DbOracle等。4.1.3 方法或函數(shù)方法或函數(shù)命名遵循以下規(guī)則:a 首字母小寫;b 多個單詞間不使用間隔,除第一個單詞外,其他單詞首字母大寫。例子:function myFunction ()或function myDbOracle ()等。4.1.4 縮寫詞當(dāng)變量名或者其他命名中遇到縮寫詞時,參照具體的命名規(guī)則,而不采用縮寫詞原來的全部大寫的方式。例子:function myPear
12、(不是myPEAR) functio getHtmlSource(不是getHTMLSource)。4.1.5 數(shù)據(jù)庫表名數(shù)據(jù)庫表名命名遵循以下規(guī)范:a 表名均使用小寫字母;b 對于普通數(shù)據(jù)表,使用_t結(jié)尾;c 對于視圖,使用_v結(jié)尾;d 對于多個單詞組成的表名,使用_間隔;例子:user_info_t和book_store_v等4.1.6 數(shù)據(jù)庫字段數(shù)據(jù)庫字段命名遵循以下規(guī)范:a 全部使用小寫;b 多個單詞間使用_間隔。例子:user_name、rose_price等。4.2 書寫規(guī)則書寫規(guī)則是指在編寫php程序時,代碼書寫的規(guī)則,包括縮進(jìn)、結(jié)構(gòu)控制等方面規(guī)范:4.2.1 代碼縮進(jìn)在書寫代碼
13、的時候,必須注意代碼的縮進(jìn)規(guī)則,我們規(guī)定代碼縮進(jìn)規(guī)則如下:a 使用4個空格作為縮進(jìn),而不使用tab縮進(jìn)(對于ultraedit,可以進(jìn)行預(yù)先設(shè)置)例子:for ( $i=0;$i$count;$i+ )echo test;4.2.2 大括號 書寫規(guī)則在程序中進(jìn)行結(jié)構(gòu)控制代碼編寫,如if、for、while、switch等結(jié)構(gòu),大括號傳統(tǒng)的有兩種書寫習(xí)慣,分別如下:a直接跟在控制語句之后,不換行,如for ($i=0;$i$count;$i+) echo test;b在控制語句下一行,如for($i=0;$i$count;$i+)echo test;其中,a是PEAR建議的方式,但是從實際書寫中
14、來講,這并不影響程序的規(guī)范和影響用phpdoc實現(xiàn)文檔,所以可以根據(jù)個人習(xí)慣來采用上面的兩種方式,但是要求在同一個程序中,只使用其中一種,以免造成閱讀的不方便。4.2.3 小括號( )和函數(shù)、關(guān)鍵詞等小括號、關(guān)鍵詞和函數(shù)遵循以下規(guī)則:a 不要把小括號和關(guān)鍵詞緊貼在一起,要用一個空格間隔;如if ( $a$b );b 小括號和函數(shù)名間沒有空格;如$test = date(ymdhis);c 除非必要,不要在Return返回語句中使用小括號。 如Return $a;4.2.4 符號書寫在程序中=符號的書寫遵循以下規(guī)則:a 在=符號的兩側(cè),均需留出一個空格;如$a = $b 、if ($a = =
15、$b)等;b 在一個申明塊,或者實現(xiàn)同樣功能的一個塊中,要求=號盡量上下對其,左邊可以為了保持對齊使用多個空格,而右邊要求空一個空格;如下例:$testa = $aaa;$testaa = $bbb;$testaaa = $ccc;4.2.5 if else swith for while等書寫對于控制結(jié)構(gòu)的書寫遵循以下規(guī)則:a 在if條件判斷中,如果用到常量判斷條件,將常量放在等號或不等號的左邊,例如:if ( 6 = $errorNum ),因為如果你在等式中漏了一個等號,語法檢查器會為你報錯,可以很快找到錯誤位置,這樣的寫法要多注意;b switch結(jié)構(gòu)中必須要有default塊;c 在
16、for和wiile的循環(huán)使用中,要警惕continue、break的使用,避免產(chǎn)生類似goto的問題;4.2.6 類的構(gòu)造函數(shù)如果要在類里面編寫構(gòu)造函數(shù),必須遵循以下規(guī)則:a 不能在構(gòu)造函數(shù)中有太多實際操作,頂多用來初始化一些值和變量;b 不能在構(gòu)造函數(shù)中因為使用操作而返回false或者錯誤,因為在聲明和實例化一個對象的時候,是不能返回錯誤的;4.2.7 語句斷行, 每行控制在80個字符以內(nèi)在代碼書寫中,遵循以下原則:a 盡量保證程序語句一行就是一句,而不要讓一行語句太長產(chǎn)生折行;b 盡量不要使一行的代碼太長,一般控制在80個字符以內(nèi);c 如果一行代碼太長,請使用類似 .= 的方式斷行書寫;d
17、 對于執(zhí)行數(shù)據(jù)庫的sql語句操作,盡量不要在函數(shù)內(nèi)寫sql語句,而先用變量定義sql語句,然后在執(zhí)行操作的函數(shù)中調(diào)用定義的變量;例子:$sql = SELECT username,password,address,age,postcode FROM test_t ;$sql .= WHERE username=aaa;$res = mysql_query($sql);4.2.8 不要不可思議的數(shù)字一個在源代碼中使用了的赤裸裸的數(shù)字是不可思議的數(shù)字,因為包括作者,在三個月內(nèi),沒人它的含義。例如:if (22=$foo)start_thermo_nuclear_war();elseif(19=$f
18、oo)refund_lotso_money();elsecry_cause_im_lost();你應(yīng)該用define()來給你想表示某樣?xùn)|西的數(shù)值一個真正的名字,而不是采用赤裸裸的數(shù)字,例如:define(PRESIDENT_WENT_CRAZY,22);define(WE_GOOFED,19);define(THEY_DIDNT_PAY,16);if(PRESIDENT_WENT_CRAZY=$foo)start_thermo_nuclear_war();elseif(WE_GOOFED=$foo)refund_lotso_money();elseif(THEY_DIDNT_PAY=$foo
19、)infinite_loop();elsehappy_days_i_know_why_im_here();4.2.9 true/false和0/1判斷遵循以下規(guī)則:a 不能使用0/1代替true/false,在PHP中,這是不相等的;b 不要使用非零的表達(dá)式、變量或者方法直接進(jìn)行true/false判斷,而必須使用嚴(yán)格的完整true/false判斷;如:不使用if ($a) 或者if (checka() 而使用if (FALSE != $a)或者 if (FALSE != check()4.2.10 避免嵌入式賦值在程序中避免下面例子中的嵌入式賦值:不使用這樣的方式:while ($a !=
20、($c = getchar()process the character4.2.11 錯誤返回檢測規(guī)則檢查所有的系統(tǒng)調(diào)用的錯誤信息,除非你要忽略錯誤。為每條系統(tǒng)錯誤消息定義好系統(tǒng)錯誤文本,并記錄錯誤LOG。4.3 程序注釋每個程序均必須提供必要的注釋,書寫注釋要求規(guī)范,參照PEAR提供的注釋要求,為今后利用phpdoc生成php文檔做準(zhǔn)備。程序注釋的原則如下:a 注釋中除了文件頭的注釋塊外,其他地方都不使用/注釋,而使用/* */的注釋;b 注釋內(nèi)容必須寫在被注釋對象的前面,不寫在一行或者后面;4.3.1 程序頭注釋塊每個程序頭部必須有統(tǒng)一的注釋塊,規(guī)則如下:a 必須包含本程序的描述;b 必須
21、包含作者;c 必須包含書寫日期;d 必須包含版本信息;e 必須包含項目名稱;f 必須包含文件的名稱;g 重要的使用說明,如類的調(diào)用方法、注意事項等;參考例子如下:?php/ +-+/ | PHP version 4.0 |/ +-+/ | Copyright (c) 1997-2001 The PHP Group |/ +-+/ | This source file is subject to of the PHP license, |/ | that is bundled with this packafile LICENSE, and is |/ | available at throug
22、h the world-web at |/ |/license/2_02.txt. |/ | If you did not receive a copy of the and are unable to |/ | obtain it through the world-wide-web,end a note to |/ |so we can mail you a immediately. |/ +-+/ | Authors: Stig Bakken |/ | Tomas V.V.Cox |/ | |/ +-+/$Id: Common
23、.php,v 2001/11/13 01:26:48 ssb Exp $4.3.2 類的注釋類的注釋采用里面的參考例子方式:/* Purpose:* 訪問數(shù)據(jù)庫的類,以O(shè)DBC作為通用訪問接口*PackageName: Database* Author: Forrest G* Modifications:* No-100:* odbc_fetch_into()參數(shù)位置第二和第三個位置調(diào)換* John JohnsonJ* See: (參照)*/classDatabase4.3.3 函數(shù)和方法的注釋函數(shù)和方法的注釋
24、寫在函數(shù)和方法的前面,采用類似下面例子的規(guī)則:/* Purpose:* 執(zhí)行一次查詢*MethodName: Query()* Param: string $queryStr SQL查詢字符串* Param: string $username 用戶名* Author: Michael Lee* Return: mixed 查詢返回值(結(jié)果集對象)*/function($queryStr,$username)4.3.4 變量或者語句注釋程序中變量或者語句的注釋遵循以下原則:a 寫在變量或者語句的前面一行,而不寫在同行或者后面;b 注釋采用/* */的方式;c 每個函數(shù)前面要包含一個注釋塊。內(nèi)容包
25、括函數(shù)功能簡述,輸入/輸出參數(shù),預(yù)期的返回值,出錯代碼定義。d 注釋完整規(guī)范。e 把已經(jīng)注釋掉的代碼刪除,或者注明這些已經(jīng)注釋掉的代碼仍然保留在源碼中的特殊原因。f例子:/* Purpose:* 數(shù)據(jù)庫連接用戶名* Attribute/Variable Name: db_user_name* Type: string*/vardb_user_name;4.4 其他規(guī)范(建議)4.4.1 php代碼標(biāo)記所有的php程序代碼塊標(biāo)記均使用4.4.2 程序文件名、目錄名程序文件名和目錄名命名均采用有意義的英文方式命名,不使用拼音或無意義的字母,同時均必須使用小寫字母,多個詞間使用_間隔。4.4.3 P
26、HP項目通常的文件目錄結(jié)構(gòu)建議在開發(fā)規(guī)范的獨立的PHP項目時,使用規(guī)范的文件目錄結(jié)構(gòu),這有助于提高項目的邏輯結(jié)構(gòu)合理性,對應(yīng)擴(kuò)展和合作,以及團(tuán)隊開發(fā)均有好處。一個完整獨立的PHP項目通常的文件和目錄結(jié)構(gòu)如下:/ 項目根目錄/manage 后臺管理文件存放目錄/css css文件存放目錄/doc 存放項目文檔/images 所有圖片文件存放路徑(在里面根據(jù)目錄結(jié)構(gòu)設(shè)立子目錄)/scripts 客戶端js腳本存放目錄/tpl 網(wǎng)站所有html的模版文件存放目錄/error.php 錯誤處理文件(可以定義到apache的錯誤處理中)以上目錄結(jié)構(gòu)是通常的目錄結(jié)構(gòu),根據(jù)具體應(yīng)用的具體情況,可以考慮不用完
27、全遵循,但是盡量做到規(guī)范化。4.4.4 PHP和HTML代碼的分離問題對性能要求不是很高的項目和應(yīng)用,我們建議不采用PHP和HTML代碼直接混排的方式書寫代碼,而采用PHP和HTML代碼分離的方式,即采用模版的方式處理,這樣一方面對程序邏輯結(jié)構(gòu)更加清晰有利,也有助于開發(fā)過程中人員的分工安排,同時還對日后項目的頁面升級該版提供更多便利。對于一些特殊情況,比如對性能要求很高的應(yīng)用,可以不采用模版方式。4.4.5 PHP項目開發(fā)中的程序邏輯結(jié)構(gòu)對于PHP項目開發(fā),盡量采用OOP的思想開發(fā),尤其在PHP5以后,對于面向?qū)ο蟮拈_發(fā)功能大大提高。在PHP項目中,我們建議將獨立的功能模塊盡量寫成函數(shù)調(diào)用,對應(yīng)一整塊業(yè)務(wù)邏輯,我們建議封裝成類,既可以提高代碼可讀性,也可以提高代碼重用性。比如,我們通常將對數(shù)據(jù)庫的接口封裝成數(shù)據(jù)庫類,有利于平臺的移
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025山西忻州保德縣社區(qū)工作者招(選)聘36人備考題庫附答案
- 裝訂工崗前競爭分析考核試卷含答案
- 電器附件制造工崗前安全技能測試考核試卷含答案
- 水聲換能器裝配工安全教育模擬考核試卷含答案
- 2024年海南省特崗教師招聘考試真題題庫附答案
- 2024年璧山縣事業(yè)單位聯(lián)考招聘考試歷年真題附答案
- 2024年湖南涉外經(jīng)濟(jì)學(xué)院輔導(dǎo)員考試筆試真題匯編附答案
- 2025年企業(yè)企業(yè)內(nèi)部審計制度手冊
- 2024年莎車縣幼兒園教師招教考試備考題庫附答案
- 2024年鄭州信息工程職業(yè)學(xué)院輔導(dǎo)員考試筆試題庫附答案
- GB/T 46755-2025智能紡織產(chǎn)品通用技術(shù)要求
- 2026北京市中央廣播電視總臺招聘124人參考題庫附答案
- 十五五規(guī)劃綱要解讀:循環(huán)經(jīng)濟(jì)模式推廣
- 2026年山西警官職業(yè)學(xué)院單招綜合素質(zhì)筆試備考題庫帶答案解析
- 2026年農(nóng)夫山泉-AI-面試題目及答案
- 2026凱翼汽車全球校園招聘(公共基礎(chǔ)知識)綜合能力測試題附答案
- 山東省威海市環(huán)翠區(qū)2024-2025學(xué)年一年級上學(xué)期1月期末數(shù)學(xué)試題
- 2025年手術(shù)室護(hù)理實踐指南知識考核試題及答案
- 外貿(mào)公司采購專員績效考核表
- 彩禮分期合同范本
- 胸腺瘤伴重癥肌無力課件
評論
0/150
提交評論