PSR

最后更新于:2022-04-01 23:12:48

# PSR (php standard recommendations) 為了讓大家開發的套件,能夠更輕鬆地整合到自己的專案當中,在 PHP 社群中大家一起定義了一些標準的程式碼撰寫規則 但是 Laravel 5.0.x 版本之前,Laravel 都沒有真正的遵照 PSR 的規範去撰寫程式碼,直到 Laravel 5.1 LTS 版本時,Laravel 終於將所有的程式碼遵照 PSR-2 及 PSR-4 的程式碼撰寫規則了,詳細的規則說明大家可以自己參考相關的說明文件。 而為了讓自己專案的開發也能夠遵照 PSR 規則,除了自己一個檔案一個檔案自己修改外,也可以用 [PHP Coding Standards Fixer](http://cs.sensiolabs.org/) 套件去幫我們`自動地`將程式修改成遵照 PSR 規則的程式! ### PHP Coding Standards Fixer 安裝使用教學 ### 使用 compser 下載套件 使用 composer 將 php-cs-fixer 安裝到全域(global)目錄下 ~~~ $ composer global require fabpot/php-cs-fixer ~~~ ### 設定 composer bin 目錄到環境變數中 我們必須要將我們家目錄下的全域 `~/.composer/vendor/bin` 目錄,設到環境變數中,這樣我們在命令列就可以直接執行 `~/.composer/vendor/bin` 下面的可執行檔案了 ~~~ $ export PATH="$PATH:$HOME/.composer/vendor/bin" ~~~ > 我們可以直接在命令列下這樣的指令就可以了,但每次開啟新的 Terminal 視窗時,都要再重新的設定一次這樣的環境變數,所以我們也可以把這個設定寫在 `~/.bash_profile` 檔案中,這樣每次執行 Terminal 時,就會自動將 `~/.composer/vendor/bin` 設到環境變數中了! ### 使用 php-cs-fixer 修正 PHP 檔案 設定完成後,我們就可以使用 `php-cs-fixer fix /path/to/project --level=psr2` 這樣的指令去修正我們專案目錄下的檔案了 一些 php-cs-fixer 相關的指令會像這樣: ~~~ $ php-cs-fixer fix /path/to/project --level=psr0 $ php-cs-fixer fix /path/to/project --level=psr1 $ php-cs-fixer fix /path/to/project --level=psr2 $ php-cs-fixer fix /path/to/project --level=symfony ~~~ ### 設定 Sublime 使用 php-cs-fixer 修正程式碼 在 Sublime 上方工具列 `Tools\Bulid System\New Build System` 我們可以新增一個新的建立指令,指令中我們輸入像這樣的指令: ~~~ { "shell_cmd": "php-cs-fixer fix $file --level=psr2" } ~~~ 將新的指令檔案名稱取為 `php-cs-fixer.sublime-bulid`,這樣我們回到 Sublime 去開啟任一 PHP 檔案,只要按下 `Command(⌘)`+`B`,Sublime 就會自動幫我們執行 php-cs-fixer 的 shell script 指令,去修正我們的 PHP 檔案了!! ### php-cs-fixer 使用小技巧 我們可以將修改 `~/.bash_profile` 檔案,將使用 php-cs-fixer 修正 Terminal 目前目錄的 PHP 指令加入,這樣我們只要用 Terminal 瀏覽到我們想要做 php-cs-fixer 的目錄下,我們每次只需要下 `phpCSFixerThisFolder` 指令就可以了,這樣就不用記住也不用打那麼落落長的 php-cs-fixer 指令了! ~~~ alias phpCSFixerThisFolder="php-cs-fixer fix ./ --level=psr2" ~~~ ### PSR 中文文件 - [PSR-1 - Basic Coding Standard](https://github.com/laravel-taiwan/fig-standards/blob/master/accepted/zh-TW/PSR-1-basic-coding-standard.md) - [PSR-2 - Coding Style Guide](https://github.com/laravel-taiwan/fig-standards/blob/master/accepted/zh-TW/PSR-2-coding-style-guide.md) - [PSR-3 - 日誌介面](https://github.com/laravel-taiwan/fig-standards/blob/master/accepted/zh-TW/PSR-3-logger-interface.md) - [PSR-4 - Autoloader](https://github.com/laravel-taiwan/fig-standards/blob/master/accepted/zh-TW/PSR-4-autoloader.md) ### 參考資料 - [PHP-FIG — PHP Framework Interop Group](http://www.php-fig.org/) - [PHP: The Right Way - 繁體中文](http://laravel-taiwan.github.io/php-the-right-way/) - [PHP Coding Standards Fixer](http://cs.sensiolabs.org) - [PHP-CS-Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) - [Adopting PSR-2 - laracasts](https://laracasts.com/series/whats-new-in-laravel-5-1/episodes/1)
';