PHP Insights 介紹
PHP Insights 可以用來分析PHP專案的程式品質,可以很簡單的方式從 terminal 直接進行分析。
支援 PHP 7.2+ 以上版本。 並且適用於 Laravel, Symfony, Yii, WordPress, Magento2, 等架構。
這裏主要針對 安裝及 Laravel 使用方式進行說明。
安裝方式:
composer require nunomaduro/phpinsights --dev
Docker 使用者可以透過以下方式
docker run -it --rm -v $(pwd):/app nunomaduro/phpinsights
Laravel 架構中使用
在 Laravel 架構使用 phpinsights ,可以透過 publish 將 insights 加入 artisan command
php artisan vendor:publish --provider="NunoMaduro\PhpInsights\Application\Adapters\Laravel\InsightsServiceProvider"
執行完畢之後,相關 inights 設定會在 config/insights.php
執行檢測
直接透過 phpinsights 執行
./vendor/bin/phpinsights
或者有將 insights 加入 artisan ,則可以執行下方指令
php artisan insights
下方是,針對 Laravel (5.8) 安裝後直接進行檢測,跑出結果:
[MISC] 91.3 pts on coding style and 0 security issues encountered
• [Code] Useless overriding method:
app/Exceptions/Handler.php:47: Possible useless method overriding detected
app/Providers/EventServiceProvider.php:28: Possible useless method overriding detected
app/Providers/RouteServiceProvider.php:24: Possible useless method overriding detected
+1 issues omitted
• [Code] Unused parameter:
app/Console/Kernel.php:25: Unused parameter $schedule.
• [Code] Declare strict types:
routes/channels.php:1: Missing declare(strict_types = 1).
routes/console.php:1: Missing declare(strict_types = 1).
routes/web.php:1: Missing declare(strict_types = 1).
+23 issues omitted
• [Code] Empty comment:
app/Providers/EventServiceProvider.php:32: Empty comment
app/Providers/RouteServiceProvider.php:26: Empty comment
app/Providers/RouteServiceProvider.php:42: Empty comment
+8 issues omitted
• [Code] Disallow mixed type hint:
app/Http/Middleware/RedirectIfAuthenticated.php:16: Usage of "mixed" type hint is disallowed.
• [Code] Type hint declaration:
app/User.php:25: @var annotation of property \App\User::$hidden does not specify type hint for its items.
app/User.php:34: @var annotation of property \App\User::$casts does not specify type hint for its items.
routes/console.php:16: Closure does not have void return type hint.
+42 issues omitted
• [Code] Static closure:
routes/api.php:16: Closure not using "$this" should be declared static.
routes/channels.php:14: Closure not using "$this" should be declared static.
routes/web.php:14: Closure not using "$this" should be declared static.
• [Architecture] Normal classes are forbidden. Classes must be final or abstract:
app/Http/Controllers/Auth/VerificationController.php
app/Http/Kernel.php
app/Console/Kernel.php
+19 issues omitted
• [Architecture] The name property in the `composer.json` contains the default value
• [Style] Object operator indent:
app/Providers/RouteServiceProvider.php:69: Object operator not indented correctly; expected 12 spaces but found 13
app/Providers/RouteServiceProvider.php:70: Object operator not indented correctly; expected 12 spaces but found 13
app/Providers/RouteServiceProvider.php:71: Object operator not indented correctly; expected 12 spaces but found 13
+2 issues omitted
• [Style] Line length:
app/Providers/AuthServiceProvider.php:6: Line exceeds 80 characters; contains 83 characters
app/Providers/EventServiceProvider.php:8: Line exceeds 80 characters; contains 84 characters
app/Providers/RouteServiceProvider.php:6: Line exceeds 80 characters; contains 84 characters
+3 issues omitted
• [Style] Alphabetically sorted uses:
app/Providers/EventServiceProvider.php:6: Use statements should be sorted alphabetically. The first wrong one is Illuminate\Auth\Events\Registered.
app/Providers/RouteServiceProvider.php:6: Use statements should be sorted alphabetically. The first wrong one is Illuminate\Foundation\Support\Providers\RouteServiceProvider.
app/User.php:6: Use statements should be sorted alphabetically. The first wrong one is Illuminate\Contracts\Auth\MustVerifyEmail.
+5 issues omitted
• [Style] Unused uses:
app/Providers/AuthServiceProvider.php:5: Type Illuminate\Support\Facades\Gate is not used in this file.
app/Providers/EventServiceProvider.php:5: Type Illuminate\Support\Facades\Event is not used in this file.
app/User.php:6: Type Illuminate\Contracts\Auth\MustVerifyEmail is not used in this file.
✨ See something that needs to be improved? Create an issue or send us a pull request: https://github.com/nunomaduro/phpinsights
至目前階段,在Laravel 安裝後直接檢測,會出現一些警示 Useless overriding method, Unused parameter, Empty comment, Disallow mixed type hint, Type hint declaration, Static closure
這方面,目前預計在官方會有後續計畫,在Laravel 專案預設會忽略掉這些內容。
指定記憶體
執行過程可能需要較大的系統記憶體用量時,可以透過以下方式分配
php -d memory_limit=2000M ./vendor/bin/phpinsights