PHP開發規範

PHP開發規範 

 1、基本約定

一、源文件

(1)、純PHP代碼源文件只使用 <?php 標籤,省略關閉標籤 ?> ;php

(2)、源文件中PHP代碼的編碼格式必須是無BOM的UTF-8格式;html

(3)、使用 Unix LF(換行符)做爲行結束符;sql

(4)、一個源文件只作一種類型的聲明,即,這個文件專門用來聲明Class, 那個文件專門用來設置配置信息,別混在一塊兒寫;數據庫

二、縮進

使用Tab鍵來縮進,每一個Tab鍵長度設置爲4個空格;api

三、行

一行推薦的是最多寫120個字符,多於這個字符就應該換行了,通常的編輯器是能夠設置的。數組

四、關鍵字 和 True/False/Null

PHP的關鍵字,必須小寫,boolean值:true,false,null 也必須小寫。框架

下面是PHP的「關鍵字」,必須小寫:編輯器

'abstract', 'and', 'array', 'as', 'break', 'callable', 'case', 'catch', 'class', 'clone', 'const', 'continue', 'declare', 'default', 'die', 'do', 'echo', 'else', 'elseif', 'empty', 'enddeclare', 'endfor', 'endforeach', 'endif', 'endswitch', 'endwhile', 'eval', 'exit', 'extends', 'final', 'for', 'foreach', 'function', 'global', 'goto', 'if', 'implements', 'include', 'include_once', 'instanceof', 'insteadof', 'interface', 'isset', 'list', 'namespace', 'new', 'or', 'print', 'private', 'protected', 'public', 'require', 'require_once', 'return', 'static', 'switch', 'throw', 'trait', 'try', 'unset', 'use', 'var', 'while', 'xor'函數

五、命名

(1)、類名 使用大駝峯式(StudlyCaps)寫法;post

(2)、(類的)方法名 使用小駝峯(cameCase)寫法;

(3)、函數名使用 小寫字母 + 下劃線 寫法,如 function http_send_post(); 

(4)、變量名 使用小駝峯寫法,如 $userName;

(5)、類名必需要和對應的文件名要如出一轍,大小寫也要如出一轍。

(6)、類文件名要以 .php 結尾

六、代碼註釋標籤

如 函數註釋、變量註釋等,經常使用標籤有 @package@var@param@return@author@todo@throws

必須遵照 phpDocument 標籤規則,不要另外去創造新的標籤,更多標籤查看 phpDocument官網

七、業務模塊

(1)、涉及到多個數據表 更新/添加 操做時,最外層要用事務,保證數據庫操做的原子性;

(2)、Table層,只作數據表的查詢;

(3)、業務邏輯統一封裝到 Model層;

(4)、Module層按功能抽象可複用代碼,避免重複造輪子;

(5)、Controller 控制器只作URL路由,不要看成 業務方法 調用;

(6)、控制器層不能出現SQL操做語句,如 ZendFramework框架的 from()、where()、order() 等方法,

即,控制器中,不要出現相似這樣的SQL語句:$select->from('XXX')->where()->order()->limit();  

where()、order()、limit() 等SQL方法只能出如今 table層!

 

2、代碼樣式風格

一、命名空間(Namespace) 和 導入(Use)聲明

先簡單文字描述下:

  1. 命名空間(namespace)的聲明後面必須有一行空行;
  2. 全部的導入(use)聲明必須放在命名空間(namespace)聲明的下面;
  3. 一句聲明中,必須只有一個導入(use)關鍵字;
  4. 在導入(use)聲明代碼塊後面必須有一行空行;

以下:

 

1 <?php
2 namespace Lib\Databases; //下面必須空格一行
3 
4 class Mysql{
5 
6 }

 

<?php
namespace Lib\Databases; //下面必須空格一行

class Mysql{

}

 

 

namespace下空一行,才能使用use,再空一行,才能聲明class

 

二、類(class),屬性(property)和方法(method)

(1)、繼承(extends) 和實現(implement) 必須和 class name 寫在一行。

(2)、屬性(property)必須聲明其可見性,究竟是 public 仍是 protected 仍是 private,不能省略,也不能使用var, var是php老版本中的什麼方式,等用於public。

(3)、方法(method),必須 聲明其可見性,究竟是 public 仍是 protected 仍是 private,不能省略。

若是有多個參數,第一個參數後緊接逗號 「,」 ,再加一個空格:function_name ($par, $par2, $pa3), 若是參數有默認值,「=」左右各有一個空格分開。

(4)、當用到抽象(abstract)和終結(final)來作類聲明時,它們必須放在可見性聲明 (public 仍是protected仍是private)的前面。而當用到靜態(static)來作類聲明時,則必須放在可見性聲明的後面。

三、控制結構

控制結構,就是 if else while switch等。這一類的寫法規範也是常常容易出現問題的,也要規範一下。

(1)、if,elseif,else寫法,以下:

(2)、switch,case 注意空格和換行,以下:

(3)、while,do while 的寫法也是相似,以下:

(4)、for的寫法, 以下:

(5)、foreach的寫法,以下:

(6)、try catch的寫法,以下:

 

四、註釋

(1)、行註釋

// 後面須要加一個空格;

若是 // 前面有非空字符,則 // 前面須要加一個空格;

 

(2)、函數註釋

參數名、屬性名、標籤的文本 上下要對齊;

在第一個標籤前加一個空行;

五、空格

(1)、賦值操做符(=,+= 等)、邏輯操做符(&&,||)、等號操做符(==,!=)、關係運算符(<,>,<=,>=)、按位操做符(&,|,^)、鏈接符(.) 左右各有一個空格;

(2)、if,else,elseif,while,do,switch,for,foreach,try,catch,finally 等 與 緊挨的左括號「(」之間有一個空格;

(3)、函數、方法的各個參數之間,逗號(",")後面有一個空格;

 

六、空行

(1)、全部左花括號 { 緊挨着的下方,不能是空行;

(2)、同級代碼(縮進相同)的 註釋(行註釋/塊註釋)前面,必須有一個空行;

(3)、各個方法/函數 之間有一個空行;

(4)、namespace語句、use語句、clase語句 之間有一個空行;

(5)、若是 return 語句以前只有一行PHP代碼,return 語句以前不須要空行;

(6)、若是 return 語句以前有至少二行PHP代碼,return 語句以前加一個空行;

(7)、if,while,switch,for,foreach、try 等代碼塊之間 以及 與其餘代碼之間有一個空行;

 

參考示例 彙總

參考1:

參考2:

參考3:

參考4:

 

總結:全部左花括號 { 緊挨着的下方,必定不是空行!

version 2017.10.18

【補充】

(1)、數組的書寫格式

只有一個鍵值對時,就寫成一行:

有多個(二個或二個以上)鍵值對時,就換行:

相關文章
相關標籤/搜索