使用 PHPStan 強化PHP程式碼品質

2020-07-16 10:05:57

這裡介紹一款PHP程式碼靜態分析工具:PHPStan,不需要執行程式碼,也可以對程式碼進行嚴格的語法檢測,儘量將程式碼執行錯誤率降到最低。

PHPStan

安裝

目前,PHPStanV0.10.2要求系統環境的PHP版本不低於7.1。用Composer全域性安裝:

$ composer global require phpstan/phpstan

使用

PHPStan靜態分析的使用方法十分簡單:

$ phpstan analyse [-c|--configuration CONFIGURATION] [-l|--level LEVEL] [--no-progress] [--debug] [-a|--autoload-file AUTOLOAD-FILE] [--errorFormat ERRORFORMAT] [--memory-limit MEMORY-LIMIT] [--] [<paths>]...
  • configuration:執行組態檔的路徑;

  • level:嚴格級別,0-7,越大越嚴格;

  • no-progress:不顯示進度;

  • debug:debug模式;

  • autoload-file:自動載入檔案的路徑;

  • errorFormat:錯誤格式;

  • memory-limit:記憶體限制;

  • paths:待分析的檔案路徑。

比如,分析一個PHP檔案:

$ phpstan analyse --level=7 --autoload-file=/PATH/TO/vendor/autoload.php /PATH/TO/someone.php

PHPStan in VSCode

當然,語法分析應該是編輯器做的事,寫完程式碼還要切換到命令終端執行phpstan,未免過於繁瑣。所以這裡推薦一款VSCode擴充套件:PHP Static Analysis。

PHP Static Analysis

微信截圖_20200608090947.png

首先,用Composer全域性安裝PHPStan;然後,在VSCode的擴充套件管理中搜尋PHP Static Analysis,安裝第一個匹配的擴充套件;過載VSCode過載視窗後,擴充套件會自動分析VSCode下開啟的PHP檔案。

執行效果:

微信截圖_20200608090935.png

比如,宣告了一個變數未呼叫,呼叫了一個未宣告的變數和呼叫了一個未定義的方法等等這樣錯誤都會被檢測出了。

不過,寬鬆一點地來說,其實$this->array()方法是存在的,只是通過魔術方法__call()實現的。

PHPStan with Laravel

高嚴格級別的PHPStan檢測到呼叫未宣告的類方法時,會報告類中方法不存在的錯誤,即使這個類定義了__call()或__callStatic()。

很多應用框架為了優雅,大量使用了魔術方法,比如Laravel。

用PHPStan檢測Laravel專案,自然會報告很多呼叫未宣告類方法的錯誤,對於這個問題,可以借助laravel-ide-helper來降低誤報。

安裝laravel-ide-helper

$ cd /PATH/TO/LARAVEL_PROJECT
$ composer require barryvdh/laravel-ide-helper

注入LaravelIdeHelper

編輯app/Providers/AppServiceProvider.php裡的註冊方法:

<?php
    ...
    public function register()
    {
        if ($this->app->environment() !== 'production') {
            $this->app->register(BarryvdhLaravelIdeHelperIdeHelperServiceProvider::class);
        }
        // ...
    }

生成_ide_helper.php

$ cd /PATH/TO/LARAVEL_PROJECT
$ php artisan ide-helper:generate

這時,Laravel框架中的Facade類,原本通過__callStatic()獲取的靜態方法,全部在_ide_helper.php宣告了,在PHPStan檢測Laravel專案程式碼時引入_ide_helper.php檔案,就可以減少誤報。

PHPStan設定

在Laravel專案的根目錄下,新建phpstan.neon檔案:

parameters:
    autoload_files:
        - %currentWorkingDirectory%/_ide_helper.php

在Laravel專案的根目錄下,執行phpstan命令時,會自動使用phpstan.neon這個設定。

推薦教學:《PHP

以上就是使用 PHPStan 強化PHP程式碼品質的詳細內容,更多請關注TW511.COM其它相關文章!