在說啥是PSR-[0-4]規範的以前,我以爲咱們有必要說下它的發明者和規範者:PHP-FIG。就是這個聯盟組織發明和創造了PSR-[0-4]規範php
FIG 是 Framework Interoperability Group(框架可互用性小組)的縮寫,由幾位開源框架的開發者成立於
2009 年,從那開始也選取了不少其餘成員進來,雖然不是 「官方」 組織,但也表明了社區中不小的一塊。
項目的目的在於:經過框架做者或者框架的表明之間討論,以最低程度的限制,制定一個協做標準,各個框架遵循統一的編碼規範,避免各家自行發展的風格阻礙了
PHP 的發展,解決這個程序設計師由來已久的困擾。目前已表決經過了 6 套標準,已經獲得大部分 PHP 框架的支持和承認。html
1 基礎編碼規範 PSR-1
2 編碼風格規範 PSR-2
3 日誌接口規範 PSR-3
4 自動加載規範 PSR-4
6 緩存接口規範 PSR-6
7 HTTP 消息接口規範laravel
<?php
或 <?=
標籤開始;PHP代碼中 應該 只定義類、函數、常量等聲明,或其餘會產生 反作用 的操做(如:生成文件輸出以及修改 .ini配置文件等),兩者只能選其一;git
「反作用」(side effects) 一詞的意思是,僅僅經過包含文件,不直接聲明類、函數和常量等,而執行的邏輯操做。
「反作用」包含卻不只限於:github
- 生成輸出
- 直接的 require 或 include
- 鏈接外部服務
- 修改 ini 配置
- 拋出錯誤或異常
- 修改全局或靜態變量
- 讀或寫文件等
如下是一個 反例,一份包含「函數聲明」以及產生「反作用」的代碼:緩存
<?php // 「反作用」:修改 ini 配置 ini_set('error_reporting', E_ALL); // 「反作用」:引入文件 include "file.php"; // 「反作用」:生成輸出 echo "<html>\n"; // 聲明函數 function foo() { // 函數主體部分 }
下面是一個僅包含聲明的示例文件;即應提倡的例子:框架
<?php // 聲明 function foo() { // 函數體 } // 條件式聲明不算作是反作用 if (! function_exists('bar')) { function bar() { // 函數體 } }
類的命名必須 遵循 StudlyCaps
大寫開頭的駝峯命名規範;ide
類的屬性命名 能夠 遵循:函數
- 大寫開頭的駝峯式 ($StudlyCaps)
- 小寫開頭的駝峯式 ($camelCase)
- 下劃線分隔式 ($under_score)
本規範不作強制要求,但不管遵循哪一種命名方式,都 應該 在必定的範圍內保持一致。這個範圍能夠是整個團隊、整個包、整個類或整個方法。ui
類中的常量全部字母都 必須 大寫,單詞間用下劃線分隔;
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; }
camelCase
式的小寫開頭駝峯命名規範。方法(method)的左花括號必須放到其聲明下面自成一行,右花括號則必須放到方法主體的下一行。
<?php namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { public function sampleFunction($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // 方法主體 } }
全部的屬性(property)和方法(method)必須有可見性聲明;抽象(abstract)和終結(final)聲明必須在可見性聲明以前;而靜態(static)聲明必須在可見性聲明以後。
<?php namespace Vendor\Package; abstract class ClassName { protected static $foo; abstract protected function zim(); final public static function bar() { // 方法主體部分 } }
控制結構的左括號以後不可有空格,右括號以前也不可有空格。
<?php if ($expr1) { // if body } elseif ($expr2) { // elseif body } else { // else body; }