編碼規(guī)范

PHP 編碼規(guī)范

命名篇

  • 變量命名
    • 所有字母都使用小寫;對(duì)于一個(gè)變量使用多個(gè)單詞的,使用"_"作為每個(gè)詞的間隔
    • 例如:
$user_name = "tony";
$red_rose_price = 123;
  • 常量命名
    • 所有字母使用大寫;多個(gè)單詞間使用"_"作為間隔
    • 例如:
define('ALI_TIMESTAMP',365*24*60*60);
define('TIMING_SERVER_NAME', '106.31.89.92');
  • 類命名
    • 大駝峰命名法。以大寫字母開頭,多個(gè)單詞組成的變量名,單詞之間不用間隔,各個(gè)單詞首字母大寫
    • 例如:
class LearningRoomController extends BaseController
{
}

  • 方法或函數(shù)
    • 小駝峰命名法。以小寫字母開頭,多個(gè)單詞組成的變量名,單詞之間不用間隔,各個(gè)單詞首字母大寫
    • 例如:
function postFeed() 
{
    //業(yè)務(wù)邏輯
}

class LearningRoomController extends BaseController
{
    public function postFeed()
    {
        //業(yè)務(wù)邏輯
    }
}
  • 數(shù)據(jù)庫表命名
    • 表名均使用小寫字母;
    • 對(duì)于多個(gè)單詞組成的表名,使用_間隔
    • 例如:
t_learning_feed_image
t_learning_farm_user_study_record
  • 表字段命名
    • 均使用小寫字母;
    • 對(duì)于多個(gè)單詞組成的字段,使用_間隔
    • 例如:
feed_id
actual_score
un_goal_day_count

風(fēng)格篇

  • 代碼縮進(jìn)

    • 使用4個(gè)空格作為縮進(jìn),而不使用tab縮進(jìn)
  • 大括號(hào){ }

    • 結(jié)構(gòu)控制代碼編寫,如if、for、while、switch等結(jié)構(gòu),大括號(hào)不換行
    • 類、方法、函數(shù) 大括號(hào)換行
for ($i = 1; $i < 10; $i++) {

}

if ($a > 1) {

}

foreach ($arr as $key => $value) {

}

function postFeed()
{

}

class A 
{
    public function a() 
    {

    }
}
  • 小括號(hào)( ) 與 運(yùn)算符
    • 左括號(hào)的右邊,右括號(hào)的左邊不加空格
    • 每個(gè)逗號(hào)"," 分號(hào)";" 邏輯運(yùn)算符">" "=" ">=" "<" 等等,前面不空格,后面空格
class A 
{
    public function a($paramsOne, $paramsTwo, $paramsThree) 
    {
        for ($i = 1; $i <= 10; $i++) {
            
        }
    }
}

  • switch break continue
    • switch 語句每個(gè)case后面要有break;最后必須要有default模塊
    • 在多層嵌套語句中使用break continue 時(shí)要注意層級(jí)關(guān)系,switch的case結(jié)構(gòu)會(huì)被當(dāng)做一層

for ($i = 1; $i <= 10; $i++) {
    switch ($i) {
        case 1:
            echo 123;
            break;
        case 2:
            echo "nihao";
            break;
        case 8:
            break;//如果想中斷for循環(huán) 則要使用 break 2; continue 同理
        default:
            echo "gan!";
    }
}

注釋篇

  • 類注釋
/** 
* @ Purpose: 
* 訪問數(shù)據(jù)庫的類,以O(shè)DBC作為通用訪問接口 
* @Author: Forrest Gump gump@crtvu.edu.cn 
* @Modifications: 
* No20020523-100: 
* odbc_fetch_into()參數(shù)位置第二和第三個(gè)位置調(diào)換 
* John Johnson John@crtvu.edu.cn 
* @See: (參照) 
*/ 
class Database 
{ 
…… 
}
  • 函數(shù)注釋
/** 
* @Purpose: 
* 執(zhí)行一次查詢 
* 
* @Param: string $queryStr SQL查詢字符串 
* @Param: string $username 用戶名
* 
* @Author: Michael Lee
*
* @Return: mixed 查詢返回值(結(jié)果集對(duì)象) 
*/ 
function abc($queryStr,$username)
{……}
  • 單行注釋盡量寫在代碼上一行,而不是行尾
//定義一個(gè)用戶名
$user_name = "Tony";

業(yè)務(wù)篇

  • 數(shù)據(jù)庫部分
    • 1.所有新增數(shù)據(jù)表,表結(jié)構(gòu)修改,必須嚴(yán)格遵守?cái)?shù)據(jù)庫建表規(guī)范,且由后臺(tái),微服務(wù),PHP三組組長評(píng)審?fù)ㄟ^以后才能予以修改,且必須寫明字段注釋。修改完成以后必須告知所有服務(wù)端人員以及數(shù)據(jù)組相關(guān)人員。
    • 2.每次上線,應(yīng)跟隨代碼提交所有的SQL語句,并做對(duì)應(yīng)業(yè)務(wù)說明。SQL語句必須使用索引,而且要提前預(yù)估大數(shù)據(jù)量可能會(huì)導(dǎo)致的問題。
    • 3.對(duì)于測試數(shù)據(jù)庫,如果開發(fā)和測試的時(shí)候有特殊需要,改完以后必須要予以恢復(fù),以保證測試服數(shù)據(jù)的完整性。禁止通過任何方式私自改動(dòng)生產(chǎn)環(huán)境數(shù)據(jù)庫數(shù)據(jù),必須經(jīng)過審批且通過。
    • 4.禁止在循環(huán)里面嵌套查詢。
    • 5.盡量避免連表查詢,如果實(shí)在要連表查,不要超過2張表。
    • 6.避免重復(fù)查詢。在一次請(qǐng)求的生命周期中,避免多次重復(fù)查詢同一組數(shù)據(jù)??梢酝ㄟ^傳參的方式將需要使用的數(shù)據(jù)傳達(dá)給后面的函數(shù)
  • 代碼部分

    • 所有表model必須存放在model 文件夾中
    • 業(yè)務(wù)實(shí)現(xiàn)寫在service層,controller只做業(yè)務(wù)拼接
    • 避免寫超過4層嵌套的if else 邏輯嵌套,復(fù)雜的邏輯拆分成多個(gè)方法,以提高代碼可讀性。
    • 復(fù)雜業(yè)務(wù)必須要先做好設(shè)計(jì)方案和預(yù)演。如果涉及多方,必須要一起開會(huì)討論,確定方案
    • 業(yè)務(wù)設(shè)計(jì)要盡量減少數(shù)據(jù)庫查詢,盡量減少接口調(diào)用,盡量不返回多余數(shù)據(jù)的原則。對(duì)于可能會(huì)頻繁訪問的接口,可以多使用緩存。
    • 相同業(yè)務(wù)代碼要盡量可以復(fù)用,組內(nèi)人員在開發(fā)之前要溝通好,不要相同的代碼寫很多遍。但是也要注意,如果業(yè)務(wù)有不同,也不要強(qiáng)行復(fù)用,該區(qū)分的時(shí)候也要做好區(qū)分。如果有不確定的地方,可以一起討論。
  • Git版本管理部分

    • 嚴(yán)格按照git分支管理策略,任何臨時(shí)的需求或者小的改動(dòng),都要拉分支做開發(fā)。不同需求使用不同分支,最后按上線計(jì)劃進(jìn)行合并上線
    • git的commit信息要簡要描述清楚提交的內(nèi)容,禁止提交mmm aaa 123等無意義的字符
    • 合并代碼采取提交merge request 方式。提交申請(qǐng)后,執(zhí)行代碼審查流程通過后方可合并。
  • 開發(fā)部分

    • 確保需求確認(rèn)一致,各方實(shí)現(xiàn)方案互通后在開始開發(fā),任何不明確的地方均要主動(dòng)溝通確認(rèn)并負(fù)責(zé)跟蹤消息同步進(jìn)度,確保需求的變更傳達(dá)到每一環(huán)。
    • 發(fā)現(xiàn)需求中流程走不通或者產(chǎn)品設(shè)計(jì)特別復(fù)雜的地方,要及時(shí)與產(chǎn)品溝通。討論方案可行性或者研討優(yōu)化方案。
    • 發(fā)揮主觀能動(dòng)性,積極推展項(xiàng)目進(jìn)度,積極推進(jìn)各方交流。不要只顧自己開發(fā),造成互相等的情況。
    • 要有deadline意識(shí),遇到技術(shù)難點(diǎn)或者自己能力不足的地方及時(shí)與組長溝通,不要等到最后才上報(bào),導(dǎo)致影響項(xiàng)目進(jìn)度節(jié)點(diǎn)延期。
    • 一定要注意數(shù)據(jù)的驗(yàn)證,使用數(shù)據(jù)前要做判空和類型鑒定,避免由于空對(duì)象,錯(cuò)誤的數(shù)據(jù)類型導(dǎo)致拋出異?;蛘弋a(chǎn)生預(yù)期外的結(jié)果。例如數(shù)據(jù)庫查詢結(jié)果為空時(shí),直接獲取對(duì)象屬性則會(huì)拋出異常。字符串搜索等函數(shù)要注意0和===的區(qū)別等等。
    • 嚴(yán)格按照項(xiàng)目設(shè)計(jì)去開發(fā),使用封裝好的公共方法去做數(shù)據(jù)驗(yàn)證和結(jié)果返回,保證返回給客戶端的數(shù)據(jù)類型的一致性。
    • 所有接口一律要在showDoc上提供接口文檔,標(biāo)明用法,參數(shù),返回值。對(duì)返回值中的數(shù)據(jù)要寫明注釋。
    • 注釋清晰。復(fù)雜的方法要有流程步驟注釋,函數(shù)的參數(shù)要有注釋,且寫明參數(shù)類型。
      多次的redis操作盡量采取pipline去操作,減少IO。盡可能的多使用緩存,同時(shí)要注意緩存穿透,雪崩等常見問題。
  • 接口設(shè)計(jì)

    • 接口參數(shù)盡量少,格式簡單,避免多層嵌套參數(shù) 如數(shù)組,json字符串(特殊情況除外)
    • 返回?cái)?shù)據(jù)要有封裝意識(shí)。要對(duì)數(shù)據(jù)進(jìn)行抽象,同一類型的數(shù)據(jù),同一含義的數(shù)據(jù)在不同的接口里要保持一致。對(duì)象要進(jìn)行封裝再返回。禁止將所有字段揉在一起,做一個(gè)層級(jí)返回
    • 返回?cái)?shù)據(jù)較多時(shí),要寫明注釋
    • 不要在一個(gè)接口里完成所有功能,應(yīng)盡可能的將不同的業(yè)務(wù)拆分成不同的接口,避免通過各種type去組合功能。
    {
      "result": true,
      "errorCode": 0,
      "errorMsg": "成功",
      "isEnd": false,
      "groupList": [
        {
          "groupInfo": { //群信息
            "id": 4182, //群id
            "name": "167、162、16", //群名稱
            "createTime": 1595297040000, //群創(chuàng)建時(shí)間
        }
      ]
    }
  • 接口交付
    • 接口開發(fā)應(yīng)先交付接口文檔。再根據(jù)接口文檔進(jìn)行開發(fā)
    • 接口交付一定要自己完成自測,下游可用才算完成
    • 接口返回值改動(dòng)要同步4端(android,ios,服務(wù)端,web端),并在群內(nèi)@相關(guān)人員
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容