|
1.命名規(guī)范 1.1.變量命名 1.1.1.普通變量 普通變量命名遵循以下規(guī)則: a. 所有字母都使用小寫(xiě); b. 對(duì)于一個(gè)變量使用多個(gè)單詞的,使用’_'作為每個(gè)詞的間隔。 例如:$base_dir、$red_rose_price等 1.1.2.靜態(tài)變量 靜態(tài)變量命名遵循以下規(guī)則: a. 靜態(tài)變量使用小寫(xiě)的s_開(kāi)頭; b. 靜態(tài)變量所有字母都使用小寫(xiě); c. 多個(gè)單詞組成的變量名使用’_'作為每個(gè)詞的間隔。 例子:$s_base_dir、$s_red_rose_prise等。 1.1.3.局部變量 局部變量命名遵循以下規(guī)則: a. 所有字母使用小寫(xiě); b. 變量使用’_'開(kāi)頭; c. 多個(gè)單詞組成的局部變量名使用’_'作為每個(gè)詞間的間隔。 例子:$_base_dir、$_red_rose_price等。 1.1.4.全局變量 全局變量應(yīng)該帶前綴’g',知道一個(gè)變量的作用域是非常重要的。 例如 global $gLOG_LEVEL; global $gLOG_PATH; 1.1.5.全局常量 全局變量命名遵循以下規(guī)則: a. 所有字母使用大寫(xiě) b. 全局變量多個(gè)單詞間使用’_'作為間隔。 例子:$BASE_DIR、$RED_ROSE_PRICE等。 1.1.6.Session變量 session變量命名遵循以下規(guī)則: a. 所有字母使用大寫(xiě); b. session變量名使用’S_’開(kāi)頭; c. 多個(gè)單詞間使用’_'間隔。 例子:$S_BASE_DIR、$S_RED_ROSE_PRICE等。 1.2.類(lèi) php中類(lèi)命名遵循以下規(guī)則: a. 以大寫(xiě)字母開(kāi)頭; b. 多個(gè)單詞組成的變量名,單詞之間不用間隔,各個(gè)單詞首字母大寫(xiě)。 例子:class MyClass 或class DbOracle等。 1.2.1.方法和函數(shù) 方法或函數(shù)命名遵循以下規(guī)則: a. 首字母小寫(xiě); b. 多個(gè)單詞間不使用間隔,除第一個(gè)單詞外,其他單詞首字母大寫(xiě)。 例子:function myFunction ()或function myDbOracle ()等。 1.2.2.縮寫(xiě)詞 當(dāng)變量名或者其他命名中遇到縮寫(xiě)詞時(shí),參照具體的命名規(guī)則,而不采用縮寫(xiě)詞原來(lái)的全部大寫(xiě)的方式。 例子:function myPear(不是myPEAR) functio getHtmlSource(不是getHTMLSource)。 1.2.3.數(shù)據(jù)庫(kù)表名 數(shù)據(jù)庫(kù)表名命名遵循以下規(guī)范: a. 表名均使用小寫(xiě)字母; b. 對(duì)于普通數(shù)據(jù)表,使用_t結(jié)尾; c. 對(duì)于視圖,使用_v結(jié)尾; d. 對(duì)于多個(gè)單詞組成的表名,使用_間隔; 例子:user_info_t和book_store_v等 新建數(shù)據(jù)表應(yīng)該前面加功能前綴,例如嘉榮搶紅包數(shù)據(jù)表建立 jr_redenvelope 活動(dòng)主表,區(qū)分不同活動(dòng) jr_redenvelope_coupon_lib 卡券數(shù)據(jù)庫(kù) jr_redenvelope_coupon_lib_cancel 已經(jīng)核銷(xiāo)卡券數(shù)據(jù)庫(kù) jr_redenvelope_shake_record 用戶搖紅包記錄 新建數(shù)據(jù)庫(kù)、新建字段必須添加注釋 1.2.4.數(shù)據(jù)庫(kù)字段 數(shù)據(jù)庫(kù)字段命名遵循以下規(guī)范: a. 全部使用小寫(xiě); b. 多個(gè)單詞間使用_間隔。 例子:user_name、rose_price等。 1.3.書(shū)寫(xiě)規(guī)則 書(shū)寫(xiě)規(guī)則是指在編寫(xiě)php程序時(shí),代碼書(shū)寫(xiě)的規(guī)則,包括縮進(jìn)、結(jié)構(gòu)控制等方面規(guī)范: 1.3.1.代碼縮進(jìn) 在書(shū)寫(xiě)代碼的時(shí)候,必須注意代碼的縮進(jìn)規(guī)則,我們規(guī)定代碼縮進(jìn)規(guī)則如下: a. 使用4個(gè)空格作為縮進(jìn),而不使用tab縮進(jìn)(對(duì)于ultraedit,可以進(jìn)行預(yù)先設(shè)置) 例子: for ( $i=0;$i<$count;$i++ ) { echo "test"; } 1.3.2.大括號(hào){ }書(shū)寫(xiě)規(guī)則 在程序中進(jìn)行結(jié)構(gòu)控制代碼編寫(xiě),如if、for、while、switch等結(jié)構(gòu),大括號(hào)傳統(tǒng)的有兩種書(shū)寫(xiě)習(xí)慣,分別如下: a.{直接跟在控制語(yǔ)句之后,不換行,如 for ($i=0;$i<$count;$i++) { echo "test"; } b.{在控制語(yǔ)句下一行,如 for($i=0;$i<$count;$i++) { echo "test"; } 其中,a是PEAR建議的方式,但是從實(shí)際書(shū)寫(xiě)中來(lái)講,這并不影響程序的規(guī)范和影響用phpdoc實(shí)現(xiàn)文檔,所以可以根據(jù)個(gè)人習(xí)慣來(lái)采用上面的兩種方式,但是要求在同一個(gè)程序中,只使用其中一種,以免造成閱讀的不方便。 1.3.3.小括號(hào)( )和函數(shù)、關(guān)鍵詞等 小括號(hào)、關(guān)鍵詞和函數(shù)遵循以下規(guī)則: a. 不要把小括號(hào)和關(guān)鍵詞緊貼在一起,要用一個(gè)空格間隔;如if ( $a<$b ); b. 小括號(hào)和函數(shù)名間沒(méi)有空格;如$test = date("ymdhis"); c. 除非必要,不要在Return返回語(yǔ)句中使用小括號(hào)。 如Return $a; 1.3.4.=符號(hào)書(shū)寫(xiě) 在程序中=符號(hào)的書(shū)寫(xiě)遵循以下規(guī)則: a. 在=符號(hào)的兩側(cè),均需留出一個(gè)空格;如$a = $b 、if ($a = = $b)等; b. 在一個(gè)申明塊,或者實(shí)現(xiàn)同樣功能的一個(gè)塊中,要求=號(hào)盡量上下對(duì)其,左邊可以為了保持對(duì)齊使用多個(gè)空格,而右邊要求空一個(gè)空格;如下例: $testa = $aaa; $testaa = $bbb; $testaaa = $ccc; 1.3.5.if else swith for while等書(shū)寫(xiě) 對(duì)于控制結(jié)構(gòu)的書(shū)寫(xiě)遵循以下規(guī)則: a. 在if條件判斷中,如果用到常量判斷條件,將常量放在等號(hào)或不等號(hào)的左邊,例如: if ( 6 == $errorNum ),因?yàn)槿绻阍诘仁街新┝艘粋€(gè)等號(hào),語(yǔ)法檢查器會(huì)為你報(bào)錯(cuò),可以很快找到錯(cuò)誤位置,這樣的寫(xiě)法要多注意; b. switch結(jié)構(gòu)中必須要有default塊; c. 在for和wiile的循環(huán)使用中,要警惕continue、break的使用,避免產(chǎn)生類(lèi)似goto的問(wèn)題; 1.3.6.類(lèi)的構(gòu)造函數(shù) 如果要在類(lèi)里面編寫(xiě)構(gòu)造函數(shù),必須遵循以下規(guī)則: a. 不能在構(gòu)造函數(shù)中有太多實(shí)際操作,頂多用來(lái)初始化一些值和變量; b. 不能在構(gòu)造函數(shù)中因?yàn)槭褂貌僮鞫祷豧alse或者錯(cuò)誤,因?yàn)樵诼暶骱蛯?shí)例化一個(gè)對(duì)象的時(shí)候,是不能返回錯(cuò)誤的; 1.3.7.語(yǔ)句斷行, 每行控制在80個(gè)字符以內(nèi) 在代碼書(shū)寫(xiě)中,遵循以下原則: a. 盡量保證程序語(yǔ)句一行就是一句,而不要讓一行語(yǔ)句太長(zhǎng)產(chǎn)生折行; b. 盡量不要使一行的代碼太長(zhǎng),一般控制在80個(gè)字符以內(nèi); c. 如果一行代碼太長(zhǎng),請(qǐng)使用類(lèi)似 .= 的方式斷行書(shū)寫(xiě); d. 對(duì)于執(zhí)行數(shù)據(jù)庫(kù)的sql語(yǔ)句操作,盡量不要在函數(shù)內(nèi)寫(xiě)sql語(yǔ)句,而先用變量定義sql語(yǔ)句,然后在執(zhí)行操作的函數(shù)中調(diào)用定義的變量; 例子: $sql = "SELECT username,password,address,age,postcode FROM test_t "; $sql .= " WHERE username='aaa'"; $res = mysql_query($sql); 1.3.8.不要不可思議的數(shù)字 一個(gè)在源代碼中使用了的赤裸裸的數(shù)字是不可思議的數(shù)字,因?yàn)榘ㄗ髡撸谌齻€(gè)月內(nèi),沒(méi)人它的含義。例如: if (22 == $foo) { start_thermo_nuclear_war(); } else if (19 == $foo) { refund_lotso_money(); } else { cry_cause_im_lost(); } 你應(yīng)該用define()來(lái)給你想表示某樣?xùn)|西的數(shù)值一個(gè)真正的名字,而不是采用赤裸裸的數(shù)字,例如: define("PRESIDENT_WENT_CRAZY", "22"); define("WE_GOOFED", "19"); define("THEY_DIDNT_PAY", "16"); if ( PRESIDENT_WENT_CRAZY == $foo) { start_thermo_nuclear_war(); } else if (WE_GOOFED == $foo) { refund_lotso_money(); } else if (THEY_DIDNT_PAY == $foo) { infinite_loop(); } else { happy_days_i_know_why_im_here(); } 1.3.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()) 1.3.10.避免嵌入式賦值 在程序中避免下面例子中的嵌入式賦值: 不使用這樣的方式: while ($a != ($c = getchar())) { process the character } 1.3.11.錯(cuò)誤返回檢測(cè)規(guī)則 檢查所有的系統(tǒng)調(diào)用的錯(cuò)誤信息,除非你要忽略錯(cuò)誤。 為每條系統(tǒng)錯(cuò)誤消息定義好系統(tǒng)錯(cuò)誤文本,并記錄錯(cuò)誤LOG。 1.4.程序注釋 每個(gè)程序均必須提供必要的注釋?zhuān)瑫?shū)寫(xiě)注釋要求規(guī)范,參照PEAR提供的注釋要求,為今后利用phpdoc生成php文檔做準(zhǔn)備。程序注釋的原則如下: a. 注釋中除了文件頭的注釋塊外,其他地方都不使用//注釋?zhuān)褂?* */的注釋?zhuān)?/p> b. 注釋內(nèi)容必須寫(xiě)在被注釋對(duì)象的前面,不寫(xiě)在一行或者后面; 1.4.1.程序頭注釋塊 每個(gè)程序頭部必須有統(tǒng)一的注釋塊,規(guī)則如下: a. 必須包含本程序的描述; b. 必須包含作者; c. 必須包含書(shū)寫(xiě)日期; d. 必須包含版本信息; e. 必須包含項(xiàng)目名稱(chēng); f. 必須包含文件的名稱(chēng); g. 重要的使用說(shuō)明,如類(lèi)的調(diào)用方法、注意事項(xiàng)等; 參考例子如下: <?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 through the world-web at | // | http://www.php.net/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 | // | [email protected] so we can mail you a immediately. | // +---------------------------------------------------------+ // | Authors: Stig Bakken <[email protected]> | // | Tomas V.V.Cox | // | | // +---------------------------------------------------------+ // // $Id: Common.php,v 1.8.2.3 2001/11/13 01:26:48 ssb Exp $ 1.4.2.類(lèi)的注釋 類(lèi)的注釋采用里面的參考例子方式: /** * @ Purpose: * 訪問(wèn)數(shù)據(jù)庫(kù)的類(lèi),以O(shè)DBC作為通用訪問(wèn)接口 * @Package Name: Database * @Author: Forrest Gump [email protected] * @Modifications: * No20020523-100: * odbc_fetch_into()參數(shù)位置第二和第三個(gè)位置調(diào)換 * John Johnson [email protected] * @See: (參照) */ class Database { …… } 1.4.3.函數(shù)和方法的注釋 函數(shù)和方法的注釋寫(xiě)在函數(shù)和方法的前面,采用類(lèi)似下面例子的規(guī)則: /** * @Purpose: * 執(zhí)行一次查詢 * @Method Name: Query() * * @Param: string $queryStr SQL查詢字符串 * @Param: string $username 用戶名 * * @Author: Michael Lee * * @Return: mixed 查詢返回值(結(jié)果集對(duì)象) */ function($queryStr,$username) {……} 1.4.4.變量或者語(yǔ)句注釋 程序中變量或者語(yǔ)句的注釋遵循以下原則: a. 寫(xiě)在變量或者語(yǔ)句的前面一行,而不寫(xiě)在同行或者后面; b. 注釋采用/* */的方式; c. 每個(gè)函數(shù)前面要包含一個(gè)注釋塊。內(nèi)容包括函數(shù)功能簡(jiǎn)述,輸入/輸出參數(shù),預(yù)期的返回值,出錯(cuò)代碼定義。 d. 注釋完整規(guī)范。 e. 把已經(jīng)注釋掉的代碼刪除,或者注明這些已經(jīng)注釋掉的代碼仍然保留在源碼中的特殊原因。 f. 例子: /** * @Purpose: * 數(shù)據(jù)庫(kù)連接用戶名 * @Attribute/Variable Name: db_user_name * @Type: string */ var db_user_name;
每個(gè)新建的文件前必須加上注釋?zhuān)⑨尭袷?/p> /** * 實(shí)現(xiàn)功能描述: * 創(chuàng)建人: * 創(chuàng)建時(shí)間: * 修改人1: * 修改內(nèi)容: * 修改時(shí)間: * 修改人2: * 修改內(nèi)容: * 修改時(shí)間: **/
每個(gè)新建控制器、方法必須添加注釋
2. 代碼規(guī)范特殊要求 2.1.商家后臺(tái) 2.1.1.列表頁(yè)面 1. 必須使用最新的后臺(tái)樣式; 2. 必須有分頁(yè),要有搜索,要有導(dǎo)出成excel 2.1.2.編輯頁(yè)面 1. 如果涉及到圖片,則必須鏈接到圖片庫(kù),用戶可以從圖片庫(kù)選擇圖片,也可以上傳圖片; 2. 如果涉及到音樂(lè),則必須鏈接到系統(tǒng)音樂(lè)消息庫(kù),從音樂(lè)庫(kù)中選擇; 2.1.3.微信支付 1. 支付目錄設(shè)置成同一個(gè)(weixinpl/common_shop/jiushop/) (因?yàn)槲⑿胖荒茉O(shè)置3個(gè)支付目錄) 2.1.4.過(guò)濾單引號(hào) 所有的get或者post傳過(guò)來(lái)的參數(shù),都要過(guò)濾$rule =$configutil->splash_new($_POST["rule"]); Or $rule =$configutil->splash_new($_GET["rule"]); 2.1.5.公共代碼文件 能用公共文件盡量用公共代碼文件 1. weixin目錄的公共方法寫(xiě)在app/common/common.php,全局參數(shù)配置在app/Conf/config.php 2. weixinpl目錄的公共方法寫(xiě)在app/common,全局參數(shù)配置在config.php
2.1.6.資源文件放到約定地方 1. Weixin目錄資源文件放到plat/Public 目錄,例如嘉榮搶紅包 Js 放到 Public/JrRedEnvelope/js Css 放到 Public/JrRedEnvelope/css image 放到 Public/JrRedEnvelope/img 2、Weixin 目錄 上傳圖片放到 plat/app/Public 目錄,并且按customer_id 分開(kāi)存放,例如 Customer_id為44的用戶上傳搖周邊的圖片放 plat/app/Public/upload_shakearound/44/ Customer_id為44的用戶上傳搶紅包的圖片放 plat/app/Public/upload_JrRedEnvelope/44/ 3、 weixinpl 目錄 上傳圖片放到 up/oemID/customer_id/ 目錄,并且按功能分開(kāi)存放,例如 oemID為1,Customer_id為44的用戶上傳商城基本設(shè)置的圖片放 up/1/44/Base
2.1.5在Weixin目錄添加新功能應(yīng)該獨(dú)立控制器和視圖,而不應(yīng)放到IndexV2Action控制器里面 例如,新建嘉榮紅包功能,應(yīng)新建控制器JrRedEnvelopeAction.class.php 、視圖文件夾Tpl/JrRedEnvelope、資源文件夾Public/JrRedEnvelope, 上傳圖片文件夾app/Public/upload_rRedEnvelope, 用來(lái)分別編寫(xiě)邏輯代碼、html、存放資源文件以及客戶上傳的圖片 2.2.前端 2.2.1.提示語(yǔ)言 1. 必須清晰和無(wú)理解歧義 2.2.2.列表頁(yè)面 1. 必須添加‘加載更多’,不能一頁(yè)顯示全所有產(chǎn)品; 2.2.3.過(guò)濾單引號(hào) 所有的get或者post傳過(guò)來(lái)的參數(shù),都要過(guò)濾$rule =$configutil->splash_new($_POST["rule"]); Or $rule =$configutil->splash_new($_GET["rule"]); 2.2.4.公共文件或方法 weixinplcommonutility_shop.php文件中 SendMessage($content,$fromuser,$customer_id)調(diào)用微信接口發(fā)送文字類(lèi)型客服消息,$content發(fā)送內(nèi)容,$fromuser微信用戶openid,$customer_id商家ID SendMessage_formedia($material_id,$fromuser,$customer_id,$type)調(diào)用微信接口發(fā)送圖片,視頻,語(yǔ)音,音樂(lè)消息,$material_id素材ID(可以通過(guò)素材群發(fā)功能上傳素材獲取id),$fromuser微信用戶openid,$customer_id商家ID,$type素材類(lèi)型(5圖片,6視頻,4音樂(lè),3語(yǔ)音) weixinplcommonutility.php文件中 sendMessage($username,$pwd,$tel,$content,$connect=null)調(diào)用短信發(fā)送接口,$username,$pwd短信發(fā)送賬號(hào)密碼(舊版本需要,新版本統(tǒng)一調(diào)用數(shù)據(jù)庫(kù)),$tel手機(jī)號(hào),$content發(fā)送內(nèi)容,$connect數(shù)據(jù)庫(kù)對(duì)象(如果數(shù)據(jù)庫(kù)使用對(duì)象連接就需要傳該參數(shù)) add_material($access_token,$data,$type)新增永久素材,$access_token微信公眾號(hào)的全局唯一票據(jù),$data素材信息JSON格式,$type素材類(lèi)型圖片(image)、語(yǔ)音(voice)、視頻(video) del_material($access_token, $data = null)刪除永久素材,$access_token微信公眾號(hào)的全局唯一票據(jù),$data素材信息JSON格式 get_access_token($appid,$appsecret)獲取access token,$appid第三方用戶唯一憑證,$appsecret第三方用戶唯一憑證密鑰 add_news($customer_id,$data = null)上傳圖文消息素材,$customer_id商家ID,$data素材信息JSON格式 update_news($customer_id,$data = null)修改圖文消息素材,$customer_id商家ID,$data素材信息JSON格式 weixinplcommonutility.php文件中 web_Authorization($customer_id) 調(diào)用微信網(wǎng)頁(yè)授權(quán)接口,$customer_id商家id 2.2.5.微信圖片、視頻、語(yǔ)音 微信接口所用到的media_id統(tǒng)一在移動(dòng)應(yīng)用->微信應(yīng)用->素材群發(fā)里面上傳和調(diào)用 3.商城 3.1.個(gè)人數(shù)據(jù)公用文件 目錄路徑:weixinpl/common/own_data.php 3.2.公用常用方法 目錄路徑:weixinpl/common/utility_fun.php 3.3.分傭方法 目錄路徑:weixinpl/common/utility_shop.php
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|