首頁  >  文章  >  後端開發  >  PHP規範之PSR規範

PHP規範之PSR規範

不言
不言原創
2018-04-26 14:42:313721瀏覽

這次的這篇文章介紹的是關於PHP規範中的psr規範,現在分享給大家,有興趣的小夥伴可以看一看

參考:http://psr .phphub.org/

PSR 不是PHP官方標準,而是從如Zend、Symfony2等知名PHP計畫中提煉出來的一系列標準,目前有越來越多的社區計畫加入並遵循該標準。 <br>

<br>

<br>

  • #PSR- 0 自動載入X已廢棄

  • PSR-1 基本程式碼規格

  • ##PSR- 2 程式碼樣式

  • PSR-3 日誌介面

  • PSR-4 如何指定文件路徑從而自動載入類別定義

 

PSR-1基本程式碼規格

本篇規範制定了程式碼基本元素的相關標準,以確保共享的PHP程式碼間具有較高程度的技術互通性。

檔案

#·       #PHP #程式碼檔案 必須 ## <span style="color:#858080;background:#F9FAFA;"></span>##   

 標籤開始;·       PHP程式碼檔案 #必須<span style="color:#858080;background:#F9FAFA;"></span> <span style="color:#858080;background:#F9FAFA;">以</span> <span style="color:#858080;background:#F9FAFA;"></span>不帶<span style="color:#858080;background:#F9FAFA;"></span>

<span style="color:#FF0000;background:#F9FAFA;"></span> ## BOM

UTF-8 

#編碼;## ################·       ######PHP########### ############################################################################################### ####### ######只定義類別、函數、常數等######聲明######,或其他會######產生##### # #########副作用######### ######的動作######(如:產生檔案輸出以及修改###### .ini ######設定檔等),二者只能選其一;################### ############# #####命名空間與類別#########

·       類別命名 #遵循 <span style="color:#858080;background:#F9FAFA;">StudlyCaps</span> 大寫開頭的駝峰命名規格;

·       #每個類別都獨立為一個文件,且命名空間至少有一個層級:頂級的組織名稱(vendorname

  • 類別屬性小寫開頭駝峰 $studlyCaps

  • 類別方法:小寫開頭駝峰

 

 

常數#·       類別中的所有常數皆有常數 

    必須
  •  #大寫,字間用底線分隔;<span style="color:#858080;background:#F9FAFA;"></span>

  • #方法名稱 
必須

 符合 camelCase 式的小寫開頭駝峰命名規格。

 

#PSR-2編碼風格規格縮排·        

#必須

 使用

    4
  • #個空白符號而不是「Tab 鍵”進行縮排。

  • #每行的字元數 應該 軟性保持在80 個之內

    ,一定不可 多於120 個,但 一定不能 有硬性限制。
  • 所有PHP檔案

  • 必須
  • 以一個空白行作為結束。 每行一定不可

  • 存在多於一條語句
  • 每個 namespace 命名空間宣告語句和 use 宣告語句區塊後面,必須 插入一個空白行

    ###############類別###的開始花括號(###{###) 必須 寫在函數宣告後###自成一行###,結束花括號(###}###)也 必須 寫在函數主體後面###自成一行###。 ######
  • 方法的開始花括號({) 必須 寫在函數宣告後自成一行,結束花括號(})也 必須 寫在函數主體後面自成一行

  • 控制結構的開始花括號({) 必須寫在宣告的同一行,而結束花括號(}) 必須寫在主體後面自成一行

 

# 修飾符

  • <span style="color:#858080;background:#F9FAFA;"></span><span style="color:#858080;background:#F9FAFA;"></span>##類別的屬性與方法 #必須 新增存取修飾符(privateprotected 以及 public),abstract 以及final 必須 宣告在存取修飾符之前,而 static  

必須

 宣告在存取修飾符之後

     

#類別方法參數每個逗號後面

#必須

要有一個空格,而逗號前面一定不可有空格控制結構的開始左括號後和結束右括號前,都 一定不可 有空格符號。

  • 關鍵字

#·       

#控制結構的關鍵字後面必須

要有一個空格符,而呼叫方法或函數時則######一定不可######有。 #####################PHP所有 關鍵字 必須 全部小寫,常數 true 、false 和 null 也 必須 全部小寫。 ##################### ##########

PSR-3日誌介面規範

<span style="color:#858080;background:#F9FAFA;">LoggerInterface</span> 介面對外定義了八個方法,分別用來記錄在 RFC 5424 中定義的八個等級的日誌:#debug info notice warning##、 error critical alert 以及 emergency

第九個方法 —— log<span style="color:#858080;background:#F9FAFA;"></span>,其第一個參數為記錄的等級。可使用一個預先定義的等級常數作為參數來呼叫此方法,必須 與直接呼叫以上八個方法具有相同的效果。如果傳入的等級常數參數沒有預先定義,則 必須 拋出Psr\Log\InvalidArgumentException<span style="color:#858080;background:#F9FAFA;"></span> 類型的例外。在不確定的情況下,使用者 不該使用未支援的等級常數來呼叫此方法。

/**

 * 日誌等級常數定義

 */

#class LogLevel

{

#    constEMERGENCY ='emergency';

    const

#ALERT     ='alert';

    constCRITICAL#='critical';

############################################################### ##########    ######const#######ERROR######     #####=#######'error'#### ##;#########

    constWARNING   =##'warning';

    constNOTICE#    =##    #=#'notice'

;#    constINFO #      ='info'

#;##    #constDEBUG     ='debug'##;

} 

#PSR-4自動載入規格

類似如下範例:()*

#1. 完全合規類別名稱必須有一個頂層命名空間(Vendor Name

2. 完全合規類別名稱可以有多個子命名空間

#3. 完全合規類別名稱應該有終止類別名稱

4. 下劃線在完全合規類別名稱中是沒有特殊意義的

5. 字母在完全合規類別名稱中可以是任何大小寫的組合

6. 所有類別名稱必須以大小寫敏感的方式引用

#7.  終止類別名稱對應一個以

.php 結尾的檔案。檔案名稱必須與終止類別名稱大小寫符合

 

#一些常用的自訂規格

控制層

1. 不出現sql語句(sql封裝到模型層然後作為方法呼叫)

2. sql語句、3行以上邏輯程式碼空行<br><br>3. 上下文關係函數或方法間不空行<br><br><br>4. bool使用if (true === $name)的形式<br>5. 使用雙引號連結變數

6. 注意隱含轉換

#7. 使用全域變數需要註解其意義,取值範圍

############/**### * ######全域變數總體說明### * Global STATUS_CODE### * 0 ###- SUCCESS### * 2 - ERROR### */## ####STATUS_CODE################## #############8. 函數頭部如下註解:######

/*************************************************<br># Function:       // 函數中文名稱<br>Description:    // 函數功能、效能等描述的說明<br>Calls:          //由本函數呼叫// 呼叫本函數的函數清單<br>Table Accessed: // 被存取的資料表(此項目僅針對牽扯到資料庫操作的程式)<br>Table Updated:  // 被修改的資料表(此項目只針對牽扯到資料庫作業的程序)<br>Input:          // 輸入參數說明,包含每個參數的功能、值說明及參數間關係。 <br>Output:         // 對輸出參數的說明。 <br>Return:         // 函數回傳值的說明<br>Others:         // 其它說明<br> ************************** ***********************/<br>

9.註釋間空行

// code one comments<br>program code one <br><br>#// code two comments<br>program code two

## 

<br><br><br> <br>10. 檔案頭註解<br><br><br><br><br><br>/**************************************************** ********<br>Copyright (C), 1988-1999, Huawei Tech. Co., Ltd. // 版權

FileName: test.cpp            文件名稱

Author:                                                 地              // 日期Description:                 :                                 #History:                                  ;version >    Lizhijian   17/10/11   1.0          init

 ******** ***************************************************/

####11. switch語句的case跳轉需要註解#############12. 標記變數的命名:######

temp 可縮寫為 tmp  ;<br>##flag 可縮寫為  flg  ;<br>#statistic 可縮寫為  stat #;<br>increment 可縮寫為  inc  ;<br>message 可縮寫為  msg  ;

##13.介面的命名前綴

add / #remove       begin #/ end        create #/ destroyinsert <br>#/#delete       first / last         get / #increment ##increment ##increment <br>/decrement                 put / getadd <br>/delete         lock / unlock      open / closemin <br>/max          old #/ / # new         <br>start / stopnext ##/##previous    / target     show / <br>##hidesend #/receive       source / <br>destinationcut /#paste          上 / down

##14.狀態碼盡量使用常數,而不是難以理解的數字

應改為如下形式。 <br>#defineTRUNK_IDLE 0<br>#define TRUNK_BUSY 1<br> <br>##if (Trunk[index#].##trunk_state == TRUNK_IDLE#){    <br><br>Trunk [index].#trunk_state = TRUNK_BUSY;    <br>... ##//program code#} <br> 

15.

類別檔案

名稱使用頭大寫駝峰方式普通檔案名稱使用下劃線方式#16.

設定裡的變數

名稱使用下劃線方式 

1. 变量自增自减写到表达式前面: --e >= $name
2. 程序顺序应该遵循:参数定义代码->判断逻辑代码->业务逻辑代码
3. 大的数据使用引用
4. 为逻辑代码里每个复杂度高/重复度高的代码添加注释
5. 尽量不为简短代码引入新的变量,减少变量污染
<br>

##1#、如果能將類別的方法定義成#static#,就盡量定義成#static,它的速度會提升將近4

#。

2#、 $row['id']的速度是#$row[id]7倍。 3#、 echoprint

#快,並且使用#echo的多重參數#(譯註:指用逗號而不是句點)#取代字串連接,例如

echo $str1 ,$str2

###4#############、正在執行########## ##for############迴圈之前確定最大迴圈數,不要每迴圈一次都計算最大值,最好運用############foreach#### #########代替。 ########################5#############、註銷那些不用的變數尤其是大數組,以便釋放內存。 ######

6、盡量避免使用__get__set#,##__autoload

7#、 require_once()代價昂貴。

8#、# include檔案時盡量使用絕對路徑,因為它避免了PHP

include_path裡尋找檔案的速度,解析作業系統路徑所需的時間會更少。 9#、如果你想知道腳本開始執行 #(翻譯註:即伺服器端收到客戶端請求)#的時刻,使用$_SERVER['REQUEST_TIME']好於

time()

10#、函數取代正規表示式完成相同功能。 11 str_replace函數比preg_replace函數快,#str函數的效率是

#str_replace函數的四倍。

12#、如果一個字串替換函數,可接受數組或字符作為參數,並且參數長度不太長,那麼可以考慮額外寫一段替換代碼,使得每次傳遞參數是一個字符,而不是只寫一行代碼接受數組作為查詢和替換的參數。 13#、使用選擇分支語句(譯註:即#switch case)##好於使用多個if

else if

語句。 14#、用

@

屏蔽錯誤訊息的做法非常低效,極為低效。 15

# #apache############的############mod_deflate############模組,可以提高網頁的瀏覽速度。 ######

16#、資料庫連線當使用完畢時應關掉,不要用長連接。

17#、錯誤訊息代價昂貴。

18#、避免遞增全域變數

相關推薦:

關於php規範的PSR-4 關於雷鋒的手抄報關於春節的手抄報關於春節的古

PHP規格之PSR-1 php語言php手冊php開發工

以上是PHP規範之PSR規範的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn