PHP編碼規(guī)范

目的

為了更好的提高技術(shù)部的工作效率,保證開發(fā)的有效性和合理性饶深,并可最大程度的提高程序代碼的可讀性和可重復(fù)利用性奔浅,指定此規(guī)范。

整體要求

本規(guī)范以PSR規(guī)范為基礎(chǔ)擴(kuò)展補(bǔ)充制定邻遏。 完全遵守PSR-1糠亩, PSR-2規(guī)范。
規(guī)范包命名規(guī)范准验、代碼縮進(jìn)規(guī)則赎线、控制結(jié)構(gòu)、函數(shù)調(diào)用糊饱、函數(shù)定義垂寥、注釋、包含代碼另锋、PHP標(biāo)記滞项、文件頭的注釋塊、常量命名等方面的規(guī)則夭坪。

規(guī)范

  • 文件
  • 源文件 必須 只使用 <?php文判。
  • 源文件中php代碼的編碼格式 必須 只使用不帶BOM的UTF-8。
  • 源文件在文件結(jié)尾處 必須 忽略掉?>且 必須 以一個空行結(jié)尾台舱。
  • 類定義文件建議使用類名作為文件名律杠。
  • 類文件必須使用命名空間為路徑存儲潭流。
  • 類文件名和類名保存一致竞惋,用首字母大寫。其他文件全部用小寫字母加下劃線灰嫉。
  • 基礎(chǔ)規(guī)范
    一個源文件 建議 只用來做聲明(類拆宛,函數(shù),常量等)或者只用來做一些輔助作用的操作(例如:輸出信息讼撒,修改.ini配置等),但不應(yīng)當(dāng)同時做這兩件事浑厚。
    類名 必須 使用 StudlyCaps 寫法,比如SampleController。
    類中的常量 必須 只由大寫字母和下劃線(_)組成根盒。
    方法名 必須 使用 camelCase(駝峰式)寫法,比如getTotalById钳幅。
  • 代碼規(guī)范
    代碼必須使用4個空格符而不是 tab鍵 進(jìn)行縮進(jìn)。
    備注: 使用空格而不是 tab鍵 縮進(jìn)的好處在于炎滞,
    避免在比較代碼差異敢艰、打補(bǔ)丁、重閱代碼以及注釋時產(chǎn)生混淆册赛。
    并且钠导,使用空格縮進(jìn)震嫉,讓對齊變得更方便。

關(guān)鍵字 以及 true / false / null

PHP所有 關(guān)鍵字必須全部小寫牡属。
常量 true 票堵、false 和 null 也必須全部小寫。

每行的字符數(shù)應(yīng)該保持在100個以內(nèi)逮栅, 通常情況不應(yīng)超過150個悴势。如果換行可能破壞語意或降低可閱讀性,可作為例外超出限制证芭。

每個 namespace 命名空間聲明語句和 use 聲明語句塊后面瞳浦,必須插入一個空白行。所有 use 必須 在 namespace 后聲明废士。每條 use 聲明語句 必須 只有一個 use 關(guān)鍵詞叫潦。use 聲明語句塊后 必須 要有一個空白行。例如:

  <?php
  namespace Vendor\Package;

  use FooClass;
  use BarClass as Bar;
  use OtherVendor\OtherPackage\BazClass;

  // ... additional PHP code ...
擴(kuò)展與繼承,關(guān)鍵詞 extends 和 implements 必須寫在類名稱的同一行,類的開始花括號必須獨(dú)占一行官硝,結(jié)束花括號也必須在類主體后獨(dú)占一行矗蕊。

  namespace Vendor\Package;

  use FooClass;
  use BarClass as Bar;
  use OtherVendor\OtherPackage\BazClass;

  class ClassName extends ParentClass implements \ArrayAccess, \Countable
  {
      // constants, properties, methods
  }

implements 的繼承列表也可以分成多行,這樣的話氢架,每個繼承接口名稱都必須分開獨(dú)立成行傻咖,包括第一個。

  <?php
  namespace Vendor\Package;

  use FooClass;
  use BarClass as Bar;
  use OtherVendor\OtherPackage\BazClass;

  class ClassName extends ParentClass implements
      \ArrayAccess,
      \Countable,
      \Serializable
  {
      // constants, properties, methods
  }

類的開始花括號({)必須寫在函數(shù)聲明后自成一行岖研,結(jié)束花括號(})也必須寫在函數(shù)主體后自成一行卿操。

方法的開始花括號({)必須寫在函數(shù)聲明后自成一行,結(jié)束花括號(})也必須寫在函數(shù)主體后自成一行孙援。

一個標(biāo)準(zhǔn)的方法聲明可參照以下范例害淤,留意其括號、逗號拓售、空格以及花括號的位置窥摄。

  <?php
  namespace Vendor\Package;

  class ClassName
  {
      public function fooBarBaz($arg1, &$arg2, $arg3 = [])
      {
          // method body
      }
  }

類的屬性和方法必須添加訪問修飾符(private、protected 以及 public)础淤, abstract 以及 final 必須聲明在訪問修飾符之前崭放,而 static 必須聲明在訪問修飾符之后。

以下是屬性聲明的一個范例

  <?php
  namespace Vendor\Package;

  class ClassName
  {
      public $foo = null;
  }

需要添加 abstract 或 final 聲明時鸽凶, 必須 寫在訪問修飾符前币砂,而 static 則必須寫在其后。

  <?php
  namespace Vendor\Package;

  abstract class ClassName
  {
      protected static $foo;

      abstract protected function zim();

      final public static function bar()
      {
          // method body
      }
  }

  • 控制結(jié)構(gòu)的基本規(guī)范如下

控制結(jié)構(gòu)的關(guān)鍵字后 必須 要有一個空格符玻侥,而調(diào)用方法或函數(shù)時則一定不能有决摧。
控制結(jié)構(gòu)的開始花括號({) 必須 寫在聲明的同一行,而結(jié)束花括號(})必須寫在主體后自成一行。
控制結(jié)構(gòu)的開始左括號后和結(jié)束右括號前蜜徽,都一定不能有空格符祝懂。
case 語句 必須 相對 switch 進(jìn)行一次縮進(jìn),而 break 語句以及 case 內(nèi)的其它語句都 必須 相對 case 進(jìn)行一次縮進(jìn)拘鞋。
如果存在非空的 case 直穿語句砚蓬,主體里必須有類似 // no break 的注釋。例如:

  <?php
  switch ($expr) {
      case 0:
          echo 'First case, with a break';
          break;
      case 1:
          echo 'Second case, which falls through';
          // no break
      case 2:
      case 3:
      case 4:
          echo 'Third case, return instead of break';
          return;
      default:
          echo 'Default case';
          break;
  }

應(yīng)該 使用關(guān)鍵詞 elseif 代替所有 else if盆色,以使得所有的控制關(guān)鍵字都像是單獨(dú)的一個詞灰蛙。例如:

  <?php
  if ($expr1) {
      // if body
  } elseif ($expr2) {
      // elseif body
  } else {
      // else body;
  }

運(yùn)算符(=, +, -, *, /, %, +=等等)左右兩邊 必須要有 一個空格。
參數(shù)和變量列表中逗號(隔躲,)前 必須不能有 空格摩梧,而逗號后 必須要有 空格。

 <?php
 namespace Vendor\Package;

 class ClassName
 {
     public function foo($arg1, &$arg2, $arg3 = [])
     {
         // method body
     }
 }

參數(shù)列表可以分列成多行宣旱,這樣仅父,包括第一個參數(shù)在內(nèi)的每個參數(shù)都 必須 單獨(dú)成行。
拆分成多行的參數(shù)列表后浑吟,結(jié)束括號以及方法開始花括號 必須 寫在同一行笙纤,中間用一個空格分隔。

  <?php
  namespace Vendor\Package;

  class ClassName
  {
      public function aVeryLongMethodName(
          ClassTypeHint $arg1,
          &$arg2,
          array $arg3 = []
      ) {
          // method body
      }
  }

while 和 do while组力。一個規(guī)范的 while 語句應(yīng)該如下所示省容,注意其 括號、空格以及花括號的位置燎字。

 <?php
 while ($expr) {
     // structure body
 }

標(biāo)準(zhǔn)的 do while 語句如下所示腥椒,同樣的,注意其 括號候衍、空格以及花括號的位置笼蛛。

<?php
 do {
     // structure body;
 } while ($expr);

標(biāo)準(zhǔn)的 for 語句如下所示,注意其括號脱柱、空格以及花括號的位置

 <?php
 for ($i = 0; $i < 10; $i++) {
 // for body
 }

標(biāo)準(zhǔn)的 foreach語句如下所示伐弹,注意其括號拉馋、空格以及花括號的位置榨为。例如:

 <?php
 foreach ($iterable as $key => $value) {
     // foreach body
 }

標(biāo)準(zhǔn)的 try catch語句如下所示,注意其括號煌茴、空格以及花括號的位置随闺。例如:

 <?php
 try {
     // try body
 } catch (FirstExceptionType $e) {
     // catch body
 } catch (OtherExceptionType $e) {
     // catch body
 }

閉包聲明時,關(guān)鍵詞 function 后以及關(guān)鍵詞use的前后都必須要有一個空格蔓腐。

 <?php
 $closureWithArgs = function ($arg1, $arg2) {
     // body
 };

 $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
     // body
 };

變量名統(tǒng)一用駝峰命名法矩乐。

PHP 標(biāo)準(zhǔn)規(guī)范

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子散罕,更是在濱河造成了極大的恐慌分歇,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件欧漱,死亡現(xiàn)場離奇詭異职抡,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)误甚,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門缚甩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人窑邦,你說我怎么就攤上這事擅威。” “怎么了冈钦?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵郊丛,是天一觀的道長。 經(jīng)常有香客問我瞧筛,道長宾袜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任驾窟,我火速辦了婚禮庆猫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绅络。我一直安慰自己月培,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布恩急。 她就那樣靜靜地躺著杉畜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪衷恭。 梳的紋絲不亂的頭發(fā)上此叠,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音随珠,去河邊找鬼灭袁。 笑死,一個胖子當(dāng)著我的面吹牛窗看,可吹牛的內(nèi)容都是我干的茸歧。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼显沈,長吁一口氣:“原來是場噩夢啊……” “哼软瞎!你這毒婦竟也來了逢唤?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涤浇,失蹤者是張志新(化名)和其女友劉穎鳖藕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體只锭,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡吊奢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了纹烹。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片页滚。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖铺呵,靈堂內(nèi)的尸體忽然破棺而出裹驰,到底是詐尸還是另有隱情,我是刑警寧澤片挂,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布幻林,位于F島的核電站,受9級特大地震影響音念,放射性物質(zhì)發(fā)生泄漏沪饺。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一闷愤、第九天 我趴在偏房一處隱蔽的房頂上張望整葡。 院中可真熱鬧,春花似錦讥脐、人聲如沸遭居。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽俱萍。三九已至,卻和暖如春告丢,著一層夾襖步出監(jiān)牢的瞬間枪蘑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工岖免, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岳颇,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓觅捆,卻偏偏與公主長得像赦役,于是被迫代替她去往敵國和親麻敌。 傳聞我的和親對象是個殘疾皇子栅炒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容