PSR-1 Basic Coding Standard(譯)-- 基礎編碼規範

注:本文算是筆者對PSR規範翻譯/學習筆記,以後會陸續翻譯剩餘的規範,可能翻譯的有錯誤的地方,但願讀者可以指正,很是感謝.php

什麼是PSR?

      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規範框架

  • PSR-1: Basic Coding Standard
  • PSR-2: Coding Style Guide
  • PSR-3: Logger Interface
  • PSR-4: Autoloader
  • PSR-6: Caching Interface
  • PSR-7: HTTP message interfaces
  • PSR-11: Container interface
  • PSR-13: Link definition interfaces
  • PSR-16: Common Interface for Caching Libraries

什麼是 PSR-1?

原文連接:PSR-1 Basic Coding Standardide

Aims to ensure a high level of technical interoperability between shared PHP code.學習

PSR-1 就是爲了可以使共享的PHP代碼之間有高度的互操做性.ui

OverView (概覽)

  • PHP文件(MUST)必須只使用<?php 和 <?= 標籤.
  • PHP文件(MUST)必須只能使用無BOM頭的UTF-8編碼格式.
  • PHP文件(SHOULD)應該要麼聲明 classe,functions。constants 等等,或者 general ouput(通用輸出?),改變php.ini的配置等等,可是(SHOULD Not)不該該兩個都有.
  • 命名空間和類(MUST)必需要遵循自動加載的PSR規範[PSR-0,PSR-4];
  • 類名明明(MUST)必須以大駝峯式.
  • 類中的常量的命名(MUST)必須爲如下劃線分割的大寫字母.
  • 方法名(MUST)必須爲小駝峯式.

PHP Tags

PHP代碼(MUST)必須使用長標籤<?php ?> 或者 短標籤 <?= ?>;(MUST NOT)不能有其餘類型的寫法.編碼

Character Encoding

PHP代碼(MUST)必須只使用無BOM頭的UTF-8編碼格式.spa

Side Effects

     一個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
    }
}

Namespace and Class Names

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。

Constants

類中的常量(MUST)必須爲如下劃線分割的大寫字母.
for example:

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

Properties

對於類的屬性,本文檔有意省略了對屬性名的命名方式.(大駝峯/小駝峯/下劃線等)

不管採用什麼樣的命名方式(SHOULD)應該和其所在scope相一致.scope 可能爲vendor級別,package級別,class級別,或者method級別.

Methods

方法名(MUST)必須聲明爲小駝峯式.

相關文章
相關標籤/搜索