php開發規範

PSR-[0-4]

  • PSR —— Proposing a Standards Recommendation
  • PSR-0 (Autoloading Standard) 自動加載標準
  • PSR-1 (Basic Coding Standard) 基礎編碼標準
  • PSR-2 (Coding Style Guide) 編碼風格嚮導
  • PSR-3 (Logger Interface) 日誌接口
  • PSR-4 (Improved Autoloading) 自動加載的加強版,能夠替換掉PSR-0了。

PSR-1

  1. PHP源文件必須只使用 <?php 和 <?= 這兩種標籤。
  2. 源文件中php代碼的編碼格式必須是不帶字節順序標記(BOM)的UTF-8。
  3. 一個源文件建議只用來作聲明(類(class),函數(function),常量(constant)等)或者只用來作一些引發反作用的操做(例如:輸出信息,修改.ini配置等),但不建議同時作這兩件事。
  4. 命名空間(namespace)和類(class) 必須遵照PSR-0標準。
  5. 類名(class name) 必須使用駱駝式(StudlyCaps)寫法 (注:駝峯式(cameCase)的一種變種,後文將直接用StudlyCaps表示)。
  6. 類(class)中的常量必須只由大寫字母和下劃線(_)組成。
  7. 方法名(method name) 必須使用駝峯式(cameCase)寫法。

PSR-2

  • 文件末尾必須空一行。
  • 必須使用Unix LF(換行)做爲行結束符。
  • 純PHP代碼源文件的關閉標籤?>必須省略。
  • 縮進必須使用4個空格來縮進
  • 一行推薦的是最多寫80個字符
  • php的關鍵字,必須小寫,boolean值:true,false,null 也必須小寫
  • 命名空間
    • 命名空間(namespace)的聲明後面必須有一行空行。
    • 全部的導入(use)聲明必須放在命名空間(namespace)聲明的下面。
    • 一句聲明中,必須只有一個導入(use)關鍵字。
    • 在導入(use)聲明代碼塊後面必須有一行空行。
<?php
namespace Lib\Databases;  // 下面必須空格一行
 
use FooInterface;  //use 必須在namespace 後面聲明
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass; //  下面必須空格一行
 
class Mysql
{
}
  • extends, implement 必須和 class name 寫在一行,切花括號要換行寫。
<?php
namespace Lib\Databaes;
 
class Mysql extends ParentClass implements \PDO, \DB // 寫一行
{ //換行寫{
}
  • 屬性(property)必須聲明其可見性,究竟是 public 仍是protected仍是 private,不能省略
  • 方法(method) ,必須 聲明其可見性,究竟是 public 仍是protected仍是 private,不能省略。花括號{必須換行寫。若是有多個參數,第一個參數後緊接, ,再加個空格,且函數name和( 之間必需要有個空格:function_name($par, $par2, $pa3), 若是參數有默認值,也要用左右空格分開
<?php
namespace Lib\Databaes;
 
class Mysql extends ParentClass implements \PDO, \DB // 寫一行
{
    public getInfo($name, $age, $gender = 1) //函數名getInfo和(之間有個空格,參數之間也要有空格。默認參數也要左右都有空格
    { //必須換行寫{
    }
}
  • 當用到抽象(abstract)和終結(final)來作類聲明時,它們必須放在可見性聲明 (public 仍是protected仍是private)的前面。而當用到靜態(static)來作類聲明時,則必須放在可見性聲明的後面
<?php
namespace Vendor\Package;
 
abstract class ClassName
{
    protected static $foo; //static放後面
    abstract protected function zim(); //abstract放前面
    final public static function bar() //final放前面,static放最後。
    {
        // 方法主體部分
    }
}
 
  • 函數調用
    • 括號先後不要有空格
    • 逗號前不要空格, 逗號後加空格
    • 多行參數書寫, 第一個參數需換行, 且每行一個參數 <?php bar(); $foo->bar($arg1); Foo::bar($arg2, $arg3); <?php $foo->bar( $longArgument, $longerArgument, $muchLongerArgument );
  • 控制結構
    <?php
     
    if ($expr1) { //左右空格
        // if body
    } elseif ($expr2) { //elesif 連着寫
        // elseif body
    } else {
        // else body;
    }
    

     

    <?php
     
    switch ($expr) { //左右空格
        case 0:
            echo 'First case, with a break'; //對其
            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;
    }
    
 
<?php
 
while ($expr) { //左右空格
    // structure body
}
do {
    // structure body;  //左右空格
} while ($expr);

 

<?php
 
for ($i = 0; $i < 10; $i++) { //注意幾個參數之間的空格
    // for body
}

 

<?php
 
foreach ($iterable as $key => $value) { //仍是空格問題
    // foreach body
}

 

<?php
 
try {
    // try body
} catch (FirstExceptionType $e) { //一樣也是注意空格。
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
}
 
    • 閉包

<?php
 
closureWithArgs = function($arg1, $arg2) {
    // body
};
closureWithArgsAndVars = function($arg1, arg2) use($var1, $var2) {
    // body
};
<?php
 
 
$longArgs_noVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) {
    // body
};

 

<?php
 
 
$noArgs_longVars = function () use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
    // body
};

 

<?php
 
 
$longArgs_longVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
    // body
};

 

<?php
 
 
$longArgs_shortVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument
) use ($var1) {
    // body
};

 

<?php
 
 
$shortArgs_longVars = function ($arg) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
    // body
};
 
 
 
 
 

PSR-3php

  • 日誌接口

PSR-4java

    • autoload相關
    • 此處的「類」泛指全部的class類、接口、traits可複用代碼塊以及其它相似結構。
    • 一個完整的類名需具備如下結構:

      \<命名空間>(\<子命名空間>)*\<類名>
    • 完整的類名必需要有一個頂級命名空間,被稱爲 "vendor namespace";
    • 完整的類名能夠有一個或多個子命名空間;
    • 完整的類名必須有一個最終的類名;
    • 完整的類名中任意一部分中的下滑線都是沒有特殊含義的;
    • 完整的類名能夠由任意大小寫字母組成;
    • 全部類名都必須是大小寫敏感的。
    • 完整的類名中,去掉最前面的命名空間分隔符,前面連續的一個或多個命名空間和子命名空間,做爲「命名空間前綴」,其必須與至少一個「文件基目錄」相對應;
    • 緊接命名空間前綴後的子命名空間必須與相應的」文件基目錄「相匹配,其中的命名空間分隔符將做爲目錄分隔符。
    • 末尾的類名必須與對應的以 .php 爲後綴的文件同名。
    • 自動加載器(autoloader)的實現必定不能拋出異常、必定不能觸發任一級別的錯誤信息以及不該該有返回值。
相關文章
相關標籤/搜索