版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
騰訊PHP開發(fā)規(guī)范v騰訊科技(深圳)有限公司*版本信息&保密等級V1.0V1.12014/12/2014/12/更改要點說明新建修訂編制wilsonwsorusherding批準□機密■內(nèi)部11.1定義及縮略語縮略詞海豹平臺說明運維中心提供的研發(fā)平臺,提供框架、公共基礎(chǔ)組件、公共業(yè)務(wù)組件加速業(yè)務(wù)的日常研發(fā)工作1.2參考文檔1.3目的本規(guī)范由編程原則組成,融合并提煉了開發(fā)人員長時間積累下來的成熟經(jīng)驗,意在幫助形成良好一致的編程風格。以達到事半功倍的效果,如果有需要本文檔會不定期更新。1.4適用范圍如無特殊說明,以下規(guī)則要求完全適用于基于海豹平臺框架開發(fā)的1.5標準化作用當一個軟件項目嘗試著遵守公共一致的標準時,可以使參與項目的開發(fā)人員更容易了解項目中的代碼、弄清程序的狀況。使新的參與者可以很快的適應(yīng)環(huán)境,防止部分參與者出于節(jié)省時間的需要,自創(chuàng)一套風格并養(yǎng)成終生的習慣,導致其它人在閱讀時浪費過多的時間和精力。而且在一致的環(huán)境下,也可以減少編碼出錯的機會。缺陷是由于每個人的標準不同,所以需要一段時間來適應(yīng)和改變自己的編碼風格,暫時性的降底了工作效率。從使項目長遠健康的發(fā)展以及后期更高的團隊工作效率來考慮暫時的工作效率降低是值得的,也是必須要經(jīng)過的一個過程。標準不是項目成功的關(guān)鍵,但可以幫助我們在團隊協(xié)作中有更高的效率并且更加順利的完成既定的任務(wù)。1)程序員可以了解任何代碼,弄清程序的狀況2)新人可以很快的適應(yīng)環(huán)境3)防止新接觸PHP的開發(fā)出于節(jié)省時間的需要,自創(chuàng)一套風格并養(yǎng)成終生的習慣4)防止新接觸PHP的開發(fā)一次次的犯同樣的錯誤5)在一致的環(huán)境下,可以減少犯錯的機會2.1框架路徑框架引用路徑必須采用絕對路徑,托管的開發(fā)、測試和正式環(huán)境必須//data/php/framework2.2應(yīng)用目錄結(jié)構(gòu)應(yīng)用需要嚴格參考以下目錄安排代碼位置:應(yīng)用需要嚴格參考以下目錄安排代碼位置:webroot/index.phpindex-test.phpassets/themes/protected/modcmodc.batmodc.phpcommands/components/Web應(yīng)用入口腳本文件功能測試使用的入口腳本文件包含公開的資源文件包含CSS文件包含圖片文件包含應(yīng)用主題包含受保護的應(yīng)用文件命令行腳本W(wǎng)indows下的命令行腳本命令行PHP腳本包含自定義的'modc'命令包含可重用的用戶組件configconfig/controllers/SiteController.phpextensions/messages/models/runtime/tests/views/layouts/main.phpsystem/包含配置文件包含控制器的類文件默認控制器的類文件包含第三方擴展包含翻譯過的消息(i8n相關(guān))包含模型的類文件包含臨時生成的文件包含測試腳本包含控制器的視圖和布局文件包含布局視圖文件所有視圖的默認布局包含'site'控制器的視圖文件包含系統(tǒng)視圖文件存放應(yīng)用配置目錄,具體參考器controllers存放控制邏輯的類目錄,具體參考存放模型定義的類目錄,具體參考存放視圖文件的目錄,具體目錄參考存放國際化定義文件的目錄存放組件的類目錄,具體目錄參考onsole2.3路徑別名1)system:表示平臺框架目錄,默認為/data/php/framework。2)webroot:表示入口腳本文件所在的目錄,一般為應(yīng)用的根目錄。3)application:表示應(yīng)用的基礎(chǔ)目錄,一般為webroot/protected。4)ext:表示包含了所有第三方擴展的目錄,一般為webroot/protected/extensions。通過使用Mod::getPathOfAlias(),別名可以被翻譯為其相應(yīng)的路徑。2.3.1類型導入使用別名可以很方便的導入類的定義,如導入webroot/protected/components/Controller同樣可以使用目錄導入ModMod::import('ponents.*');3.1標簽PHP程序可以使用<php>或<=>來界定PHP代碼,在HTML頁面中嵌入純變量時,可以使用<=>這樣的形式,不可使用其他的標簽變種。3.2編碼3.3注釋1)單行注釋:在語句結(jié)尾用雙反斜杠”//“注釋2)多行注釋:多行注視以”/*”或“/**”符號開頭,以”*/“符號作為注釋結(jié)束符。需需要生成文檔的注釋必須是以“/**”開頭,以“*/”結(jié)尾。主流的IDE開發(fā)工具(如Eclipse,Zend)會用不同的顏色來區(qū)分下面的幾種注釋。3.3.1文件注釋/**/***(簡述,用在索引列表中)**詳細的功能描述(可略)**@copyrightCopyright©2014,公司名或作者名*@author${AUTHOR}*@version$Id:${FILE_NAME},v${VERSION}${TIME}${AUTHOR}Exp$*3.3.2類注釋/**/***(概要)**詳細的功能描述***@property類型$prop屬性描述**@author${AUTHOR}*@packageponents(參見)*3.3.3方法注釋/***功能描述**@param類型$fields描述**@return類型描述/3.3.4屬性注釋/***@var類型$fields描述.3.5其它以適當?shù)氖褂?lt;br/>或<b>標簽可以美化文檔,方便閱讀。露給其他開發(fā)人員,所以private方法的注釋一般以“/*”開3.4命名規(guī)則Pascal命名法:所有單詞第一個字母大寫,其他字母小寫。Camel命名法(駝峰命名法):除了第一個單詞,所有單詞第一個字母大寫,其他字母小寫。采用英文單詞或其組合,便于記憶和閱讀,切忌使用漢語拼音來命名。.4.1文件1)類文件的名稱和類名一致,如類HelloWorld,相應(yīng)的文件名為HelloWorld.php2)配置文件名小寫,如config.phpphpviewCamel母小寫,其他Pascal名應(yīng)該和文件名相匹配。3.4.3函數(shù)/方法通常方法一般為一個動作或行為動詞,函數(shù)/方法的命名采用Camel命名方法functionrunfunctionrun()functionrunFast()functiongetBackground()盡量用有意義,描述性的詞語來命名edataFile()。is-含義為問一個關(guān)于某樣事物的問題。無論何時,當人們看到is就會知道這是一個問題。get-含義為取得一個數(shù)值。set-含義為設(shè)定一個數(shù)值functionfunction_isUserTicket();3.4.4變量名1)用有意義的,描述性的詞語來命名變量量以”g_”4)開頭inxindextemp等,用于循環(huán)迭代的變量例外:for($i=0;$i<count;$i++){...}3.4.5常量名量全部使用大寫字母和下滑線組成,常量的名稱中不允許出現(xiàn)小寫字母,可使用分隔符作為下劃線。3.5書寫規(guī)則.5.1文件1)所有的PHP文件必須使用UnixLF(換行)作為行結(jié)束符。3.5.2行1)行長度不可有硬限制。2)行實際長度不應(yīng)超過80個字符;較長的行應(yīng)當被拆分成多個不超3)空行可以用來改善可讀性和區(qū)分相關(guān)的代碼塊。4)一行不應(yīng)多于一個語句。.5.3縮進每個縮進的單位約定是4個空格的縮進,并且不可使用制表符作為縮進,需每個參與項目的開發(fā)人員在編輯器(Eclipse、EditPlus、Zend忘而造成格式上的不規(guī)范。3.5.4控制結(jié)構(gòu)對于控制結(jié)構(gòu)的樣式規(guī)則概括如下:1)控制結(jié)構(gòu)關(guān)鍵詞之后必須有一個空格2)左括號之后不可有空格3)右括號之前不可有空格4)在右括號和左花括號之間必須有一個空格5)代碼主體必須有一次縮進6)右花括號必須主體的下一行每個結(jié)構(gòu)的主體必須被括在花括號里。這結(jié)構(gòu)看上去更標準化,并且當加新行的時候可以減少引入錯誤的可能性。if,elseif,else一個if結(jié)構(gòu)看起來應(yīng)該像下面這樣。注意括號,空格,花括號的位pif($expr1){//ifbody}elseif($expr2){//elseifbody}else{//elsebody;}關(guān)鍵詞elseif應(yīng)該替代elseif使用以保持所有的控制關(guān)鍵詞像一switch,case一個switch結(jié)構(gòu)看起來應(yīng)該像下面這樣。注意括號,空格和花括鍵字)必須和case主體縮進在同級。如果一個非空的case主體往下落空則必須有一個類似//nobreak的注釋。phpswitch($expr){case0:echo'Firstcase,withabreak';break;casecase1:echo'Secondcase,whichfallsthrough';//nobreakcase2:case3:case4:echo'Thirdcase,returninsteadofbreak';return;default:echo'Defaultcase';break;}while,dowhile一個while語句看起來應(yīng)該像下面這樣。注意括號,空格和花括號的pwhile($expr){//structurebody}同樣的,一個dowhile語句看起來應(yīng)該像下面這樣。注意括號,空格和花括號的位置。do{//structurebody;}while($expr);for一個for語句看起來應(yīng)該像下面這樣。注意括號,空格和花括號的位pfor($i=0;$i<10;$i++){//forbody}foreach一個foreach語句看起來應(yīng)該像下面這樣。注意括號,空格和花括號的pforeach($iterableas$key=>$value){//foreachbody}try,catch一個trycatch語句看起來應(yīng)該像下面這樣。注意括號,空格和花括號try{//trybody}catch(FirstExceptionType$e){//catchbody}catch(OtherExceptionType$e){//catchbody}3.5.5運算符1)每個運算符與兩邊參與運算的值或表達式中間要有一個空格3.5.6引號在絕大多數(shù)可以使用單引號的場合,禁止使用雙引號(性能考慮)??梢曰虮仨毷褂脝我柕那闆r包括但不限于下述:1)字符串為固定值,不包含“\t”等特殊轉(zhuǎn)義字符;2)數(shù)組的固定下標,例如$array['key'];3)表達式中不需要帶入變量,例如$string='test';,而非$string="test$var";3.5.7關(guān)鍵詞1)PHPkeywords必須使用小寫。3.5.8函數(shù)1)類必須單獨一個源文件,并且類名和文件名相同。2)類的左花括號必須放到下一行,右花括號必須放在類主體的下一3)類文件“>”結(jié)束標記去掉pclassFoo{}extendsextendsParentClassimplementsArrayAccess,properties,methodsclassClassNameCountable{//constants,}5)implements一個列表可以被拆分為多個有一次縮進的后續(xù)行。如果這么做,列表的第一項必須要放在下一行,并且每行必須只有classclassClassNameextendsParentClassimplementsArrayAccess,Countable,Serializable{//constants,properties,methods}.5.10屬性1)所有的屬性必須聲明可見性。2)var關(guān)鍵詞不可用來聲明屬性。3)一個語句不可聲明多個屬性。4)屬性名稱可以使用單個下劃線作為前綴來表明保護或私有的可見classClassName{public$foo=null;private$_bar=1;}.5.11方法1)所有的方法必須聲明可見性。2)方法名不應(yīng)只使用單個下劃線來表明是保護或私有的可見性。3)方法名在聲明之后不可跟隨一個空格。左花括號必須放在下面自成一行,并且右花括號必須放在方法主體的下面自成一行。左括號后面不可有空格,右括號前面不可有空格。4)一個方法定義看來應(yīng)該像下面這樣。注意括號,逗號,空格和花5)在參數(shù)列表中,逗號之前不可有空格,逗號之后必須要有一個空6)方法中有默認值的參數(shù)必須放在參數(shù)列表的最后面。classclassClassName{publicfunctionfooBarBaz($arg1,&$arg2,$arg3=[]){//methodbody}}7)參數(shù)列表可以被分為多個有一次縮進的多個后續(xù)行。如果這么做,列表的第一項必須放在下一行,并且每行必須只放一個參8)當參數(shù)列表被分為多行,右括號和左花括號必須夾帶一個空格放在一起自成一行。classclassClassName{publicfunctionaVeryLongMethodName(ClassTypeHint$arg1,&$arg2,array$arg3=[]){//methodbody}}4數(shù)據(jù)庫命名規(guī)范44.1命名規(guī)范數(shù)據(jù)庫的所有表(Table)、視圖(View)、索引(Index)、觸發(fā)器(Trigger)、函數(shù)(Function)和存儲過程(StoreProcedure)均應(yīng)遵循以1)命名統(tǒng)一用大寫2)命名只能由小寫字母和數(shù)字構(gòu)成,并且只能是以小寫字母打頭3)命名應(yīng)采用能夠準確反映其中文含義的英文單詞或英文單詞縮寫構(gòu)成,避免出現(xiàn)英文單詞和漢語拼音混用的局面4)命名長度不可以超過25個字符(表名盡量保持在20個字符的長度,然后再其上建立索引、主鍵、觸發(fā)器等等的時候,便于加擴5)名稱的各部分之間以"_"(下劃線)連接6)字段如有相同定義,應(yīng)該用相同命名7)命名應(yīng)避免用關(guān)鍵字,參見附錄一《關(guān)鍵字列表》4.2實體命名實體(包括庫表、視圖、函數(shù)和索引等)命名結(jié)構(gòu)如下:prefixprefix[_module]_body[_suffix]1)<prefix>為前綴名,表示數(shù)據(jù)庫對象的類型2)<module>為模塊名,按應(yīng)用模塊進行分類,為可選項3)<body>為主體名,應(yīng)該能夠清楚地說明對象的含義suffix如在該對象需分表存放時使用,如按月分開存放的表,為可選項。4.2.1前綴命名數(shù)據(jù)庫對象數(shù)據(jù)庫對象表(Table)視圖(View)綴tv數(shù)據(jù)庫對象數(shù)據(jù)庫對象觸發(fā)器(Trigger)存儲過程(Procedure)臨時表(TemporaryTable)唯一索引(Unique主鍵(PrimaryKey)外鍵(ForeignKey)函數(shù)(Function)綴pukkf4.2.2后綴命名歷史表流水表對照表關(guān)系表因數(shù)據(jù)量龐大,需按日分開存放的表因數(shù)據(jù)量龐大,需按月分開存放的表后綴_HIS_LOG_MAP_REL_YYYYMMDD_YYYYMM4.3字段命名字段命名結(jié)構(gòu)如下:prefixprefix_body[_suffix]1)<prefix>為前綴名,為必填項,必須為“f”。2)<body>為主體名,應(yīng)該能夠清楚地說明對象的含義3)<suffix>是后綴名,提供特效的含義,為可選項。4.3.1后綴命名以下是一些特別的后綴,代表了這個字段特效的含義。在其他的情況,應(yīng)避免使用以下的后綴。參數(shù)表內(nèi)的描敘字段VARCHAR255)段標識字段,一般來講是INT(11)類型字段,一般來講是CHAR(1)后綴_DESC_FLAG_ID_TYPE4.4字段類型一般來說,在保證正確性的前提下,盡量使用最小的數(shù)據(jù)類型來存儲和表示數(shù)據(jù)。小的數(shù)據(jù)類型一般比大的更快,因為小的數(shù)據(jù)類型占用這個原則很重要,但是設(shè)計的時候也不要低估需要存儲的數(shù)據(jù)的數(shù)據(jù)范簡單的數(shù)據(jù)類型需要的cup處理周期更少,比如:對整數(shù)的處理比字符串處理更容易,因為字符集和排序規(guī)則使得字符串比較復雜化了,p4.4.1數(shù)值類型1)非萬不得已不要使用DOUBLE,不僅僅只是存儲長度的問題,同時還會存在精確性的問題。2)固定精度的小數(shù),也不建議使用DECIMAL,建議乘以固定倍數(shù)轉(zhuǎn)換成整數(shù)存儲,可以大大節(jié)省存儲空間,且不會帶來任何附加維3)對于整數(shù)的存儲,在數(shù)據(jù)量較大的情況下,建議區(qū)分開TINYINT/INT/BIGINT的選擇,因為三者所占用的存儲空間也有很大的差別,能確定不會使用負數(shù)的字段,建議添加unsigned定義。4.4.2字符類型1)非萬不得已不要使用TEXT數(shù)據(jù)類型,其處理方式?jīng)Q定了他的性2)定長字段,建議使用CHAR類型,不定長字段盡量使用VARCHAR,且僅僅設(shè)定適當?shù)淖畲箝L度,而不是非常隨意的給一個很大的最大長度限定,因為不同的長度范圍,MySQL也會有不一4.4.3時間類型1)盡量使用TIMESTAMP類型,因為其存儲空間只需要DATETIME類2)對于只需要精確到某一天的數(shù)據(jù)類型,建議使用DATE類型,因為IMESTAMP3)不建議通過INT類型類存儲一個unixtimestamp的值,因為這太不直觀,會給維護帶來不必要的麻煩,同時還不會帶來任何好4.4.4ENUM&SET1)對于狀態(tài)字段,可以嘗試使用ENUM來存放,因為可以極大的降2)如果是存放可預先定義的屬性數(shù)據(jù),可以嘗試使用SET類型,即使存在多種屬性,同樣可以游刃有余,同時還可以節(jié)省不小的存4.4.5LOB類型強烈反對在數(shù)據(jù)庫中存放LOB類型數(shù)據(jù)4.5表結(jié)構(gòu)設(shè)計4.5.1適度冗余Query少Join用NOTNULL盡可能把字段定義成NOTNULL,許多表包含一些字段允許空的字段,當為一個可為空的字段建立索引時,需要為每項分配一個額外的字節(jié)。即使遇到不需要存儲值到某個字段,也應(yīng)當考慮不使用NULL,而是考慮值或者空串來代替。4.5.3索引1)唯一確定一條記錄的一個字段或多個字段要建立主鍵或者唯一索引,不能唯一確定一條記錄,為了提高查詢效率建普通索引2)對于取值不能重復,經(jīng)常作為查詢條件的字段,應(yīng)該建唯一索引(主鍵默認唯一索引),并且將查詢條件中該字段的條件置于第一個位置。沒有必要再建立與該字段有關(guān)的聯(lián)合索引。3)對于經(jīng)常查詢的字段,其值不唯一,也應(yīng)該考慮建立普通索引,查詢語句中該字段條件置于第一個位置,對聯(lián)合索引處理的方法4)需要聯(lián)合索引(或聯(lián)合主鍵)的數(shù)據(jù)庫要注意索引的順序。SQL語句中的匹配條件也要跟索引的順序保持一致。5保留字ADDANALYZEASCBEFOREBIGINTBOTHCASCADECHARCOLLATECONSTRAINTCURRENT_DATEDATABASEDAY_MINUTEDECIMALDELETEDISTINCTDOUBLEENCLOSEDEXISTSFIELDSFORCEFULLTEXT保留字ALLANDAUTO_INCREMENTBERKELEYDBBINARYBTREECASECHARACTERCOLUMNCREATECURRENT_TIMEDATABASESDAY_SECONDDEFAUL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 房地產(chǎn)買賣合同
- 車輛駕駛承包合同范本
- 外貿(mào)代理合同仲裁條款
- 正規(guī)個人借款合同范本
- 無償借用車間合同范本
- 綠化綠植買賣合同范本
- 2025合法的工程合同樣式
- 專利申請委托合同書樣本
- 項目咨詢服務(wù)合同范本
- 貨物運輸公司的勞務(wù)合同
- 保安服務(wù)項目信息反饋溝通機制
- 全國各省(直轄市、自治區(qū))市(自治州、地區(qū))縣(縣級市)區(qū)名稱一覽表
- 《團隊介紹模板》課件
- 常用中醫(yī)適宜技術(shù)目錄
- 沖壓模具價格估算方法
- 碳納米管應(yīng)用研究
- 運動技能學習與控制課件第十一章運動技能的練習
- 蟲洞書簡全套8本
- 2023年《反電信網(wǎng)絡(luò)詐騙法》專題普法宣傳
- 小學數(shù)學五年級上、下冊口算題大全
- 和平精英電競賽事
評論
0/150
提交評論