PHP最佳實踐系列之標準

PHP-FIG

1).即PHP Framework Interop Group。這個組織發佈推薦的規範,而不是強制規範。
2).PHP-FIG的使命是實現框架的互操做性。框架的互操做性指的是經過自動加載機制、接口和標準的風格,讓框架互相合做。
3).框架之間經過接口、自動加載和標準的編碼風格進行合做。php

PSR

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

  • PSR-1:基本的代碼風格github

    • 必須把PHP代碼放在<?php ?><??>標籤中。web

    • 編碼字符集必須是UTF-8框架

    • 一個PHP文件能夠定義類或者處理數據,可是不能同時作這兩件事函數

    • 遵循自動加載優化

    • 類命名遵循駝峯式命名ui

    • 常量大寫編碼

    • 方法名稱使用第一個字母小寫的駝峯式命名日誌

  • PSR-2:嚴格的代碼風格

    • 貫徹執行PSR-1

    • 使用四個空格縮進

    • 使用UNIX風格換行符

    • 不能使用關閉標籤

    • 每一行不能超過120個字符

    • PHP關鍵字一概小寫

    • 命名空間以後必須跟一個空行

    • 類的定義體起始括號應該在類命後新起一行,類的結束括號也必須新起一行

    • 方法名的括號換行方式和類一直,參數除了第一個參數前面要有空格。

    • 必須聲明屬性和方法的可見性

    • 能夠使用php code sniffer檢查代碼格式

    • 控制結構關鍵字後面的起始括號應該和控制結構的關鍵字寫在同一行,結束括號另起一行。例子以下

<?php
$gorilla = new \Animals\Gorilla;
$libs = new \Animals\StrawNeckedIbis;
if ($gorilla->isAwake() === true) {
         do {
             $gorilla->beatChest();
         } while ($libs->isAsleep() === true);
         $libs->flyAway();
}
  • 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專題系列目錄地址:https://github.com/xx19941215/webBlogPHP專題系列預計寫二十篇左右,主要總結咱們平常PHP開發中容易忽略的基礎知識和現代PHP開發中關於規範、部署、優化的一些實戰性建議,同時還有對Javascript語言特色的深刻研究。

相關文章
相關標籤/搜索