PHP最佳實踐系列之標準

蕭瀟發表於2017-08-16

PHP-FIG

1).即PHP Framework Interop Group。這個組織釋出推薦的規範,而不是強制規範。
2).PHP-FIG的使命是實現框架的互操作性。框架的互操作性指的是通過自動載入機制、介面和標準的風格,讓框架互相合作。
3).框架之間通過介面、自動載入和標準的編碼風格進行合作。

PSR

1).即PHP推薦標準。這是上面的組織制定的推薦規範。例如下面的規範:

  • PSR-1:基本的程式碼風格
    • 必須把PHP程式碼放在<?php ?><??>標籤中。
    • 編碼字符集必須是UTF-8
    • 一個PHP檔案可以定義類或者處理資料,但是不能同時做這兩件事
    • 遵循自動載入
    • 類命名遵循駝峰式命名
    • 常量大寫
    • 方法名稱使用第一個字母小寫的駝峰式命名
  • PSR-2:嚴格的程式碼風格
    • 貫徹執行PSR-1
    • 使用四個空格縮排
    • 使用UNIX風格換行符
    • 不能使用關閉標籤
    • 每一行不能超過120個字元
    • PHP關鍵字一律小寫
    • 名稱空間之後必須跟一個空行
    • 類的定義體起始括號應該在類命後新起一行,類的結束括號也必須新起一行
    • 方法名的括號換行方式和類一直,引數除了第一個引數前面要有空格。
    • 必須宣告屬性和方法的可見性
    • 控制結構關鍵字後面的起始括號應該和控制結構的關鍵字寫在同一行,結束括號另起一行。例子如下
      <?php
      $gorilla = new \Animals\Gorilla;
      $libs = new \Animals\StrawNeckedIbis;
      if ($gorilla->isAwake() === true) {
         do {
             $gorilla->beatChest();
         } while ($libs->isAsleep() === true);
         $libs->flyAway();
      }複製程式碼
    • 可以使用php code sniffer檢查程式碼格式
  • PSR-3:日誌記錄介面
    • 該規範不是一系列方針,而是一個介面,規定了PHP日誌記錄器元件可以實現的方法。
  • PSR-4:自動載入

    • 這個規範描述了一個標準的自動載入策略。自動載入策略是指在執行時按需查詢PHP類、介面或者形狀,並將其載入PHP解析器,支援PSR-4自動載入器標準的PHP元件和框架使用同一個自動載入器就能找到相關程式碼,然後將其載入PHP直譯器。
    • 該規範的精髓是把名稱空間的字首和系統中的目錄對應起來。
    • 自己實現psr-4自動載入器

      <?php
      spl_autoload_register(function ($class) {
      //這個專案的名稱空間字首
      $prefix = 'Foo\\Bar\\';
      //這個專案名稱空間字首對應的基目錄
      $base_dir = __DIR__ . '/src/';
      //引數傳入的類使用這個名稱空間字首嗎?
      $len = strlen($prefix);
      if (strncmp($prefix, $class, $len) != 0) {
        //不使用,交給下一個自動載入器處理
        return;
      }
      //去掉字首的類名
      $relative_class = substr($class, $len);
      //把名稱空間前換成基目錄
      //去掉字首中的類名,把名稱空間分隔符換成目錄分隔符
      //然後在後面加上.php
      $file = $base_dir . str_replace('\\' , '/', $relative_class) . '.php';
      
      if (file_exists($file)) {
        require $file;
      }
      });複製程式碼

      這樣的話當我們使用\Foo\Bar\Baz\Qux這個類的時候,使用SPL註冊了上面這個函式之後,PHP就會嘗試從/path/to/project/src/Baz/Qux.php 載入這個類。

專題系列

PHP專題系列目錄地址:github.com/xx19941215/…
PHP專題系列預計寫二十篇左右,主要總結我們日常PHP開發中容易忽略的基礎知識和現代PHP開發中關於規範、部署、優化的一些實戰性建議,同時還有對Javascript語言特點的深入研究。

相關文章