注:本文算是筆者對PSR規範翻譯/學習筆記,以後會陸續翻譯剩餘的規範,可能翻譯的有錯誤的地方,但願讀者可以指正,很是感謝.php
PSR是PHP Standards Recommendations(PHP標準建議) 的簡寫,是由PHP-FIG組織(PHP Framework Interop Group-PHP框架交互操做組織)提出。PHP-FIG的工做是尋找項目之間的共性,以及讓開發者能更好協同工做的方式。讀者可能在瀏覽一些PHP技術文章的時候,可能會看到PSR-1,PSR-2,PSR-4,PSR-7等,這些是PHP-FIG的標準建議,這些標準建議的命名構成是以'PSR-'+'序號',每一個PHP_FIG標準建議都是爲了解決大部分框架頻繁遇到的一個特定的問題,而與此同時框架不須要本身再去重複解決問題,而是遵循PSR標準建議,採納共享的解決方案.html
PSR規範框架
原文連接:PSR-1 Basic Coding Standardide
Aims to ensure a high level of technical interoperability between shared PHP code.學習
PSR-1 就是爲了可以使共享的PHP代碼之間有高度的互操做性.ui
PHP代碼(MUST)必須使用長標籤<?php ?> 或者 短標籤 <?= ?>;(MUST NOT)不能有其餘類型的寫法.編碼
PHP代碼(MUST)必須只使用無BOM頭的UTF-8編碼格式.spa
一個PHP文件(SHOULD)必需要聲明一些class,function,constant等,而且沒有side effects (執行邏輯),或者(SHOULD)應該有side effects(執行邏輯),可是(SHOULD NOT)不該該兩個都同時存在.翻譯
'side effects'表明的就是和聲明class,function,constant等不直接相關聯的執行邏輯,僅僅來自這個包含的文件。code
'Side effects' 包含如下操做,但不只限於此:general output(通用輸出), 'require'和'include'的使用,鏈接外部服務,修改php.ini的設置,觸發錯誤或者拋出異常,修改全局或者靜態變量,讀取或者寫入文件操做等等.
如下是一個咱們要避免的例子,就是一個具備'declarations'和side effects的PHP文件。
<?php // side effect: change ini settings ini_set('error_reporting', E_ALL); // side effect: loads a file include "file.php"; // side effect: generates output echo "<html>\n"; // declaration function foo() { // function body }
如下是一個是正確的例子,只包含了'declaraion'沒有'side effects'.
<?php // declaration function foo() { // function body } // conditional declaration is *not* a side effect if (! function_exists('bar')) { function bar() { // function body } }
This means each class is in a file by itself, and is in a namespace of at least one level: a top-level vendor name
命名空間和類(MUST)必需要遵循自動加載規範【PSR-0,PSR-4】,這意味着每一個類在一個文件中,而且至少在一個level的命名空間中:最高level的vendor名稱.
類名命名必須以大駝峯式.
PHP5.3及之後版本中,寫代碼(MUST)必須使用正式的命名空間.
For example:
<?php // PHP 5.3 and later: namespace Vendor\Model; class Foo { }
PHP5.2.x以及以前的版本(SHOULD)應該使用pseudo-namespacing(僞命名空間)的慣例:在類名前+'Vendor_'前綴.
<?php // PHP 5.2.x and earlier: class Vendor_Model_Foo { }
The term 「class」 refers to all classes, interfaces, and traits.
本文中的術語class,表明的是全部的class,interface,traits。
類中的常量(MUST)必須爲如下劃線分割的大寫字母.
for example:
<?php namespace Vendor\Model; class Foo { const VERSION = '1.0'; const DATE_APPROVED = '2012-06-01'; }
對於類的屬性,本文檔有意省略了對屬性名的命名方式.(大駝峯/小駝峯/下劃線等)
不管採用什麼樣的命名方式(SHOULD)應該和其所在scope相一致.scope 可能爲vendor級別,package級別,class級別,或者method級別.
方法名(MUST)必須聲明爲小駝峯式.