2018/01/04

PHPStan 靜態分析工具

前陣子從 gslin 那邊看到 PHPStan 這個工具,剛好手上有需要測試的程式,就拿來掃一掃。常見的問題大多都可以抓到,甚至連 doc comment 有錯誤也會抓出來。

下面弄個個 demo code 讓大家稍微看一下實際狀況。

Hello.php:
<?php
namespace Zero;

class Hello
{
    /**
     * @param array $name
     */
    public function greeting(): void
    {
        $test = '123';
        echo "Hello $name\n";
    }
}

bootstrap.php:
<?php
require __DIR__ . '/../vendor/autoload.php';

$hello = new \Zero\Hello();
$hello->greeting(123);

然後執行 PHPStan 做 level 5 的分析:
 ------ ------------------------------------------------------ 
  Line   src/Hello.php                                         
 ------ ------------------------------------------------------ 
  10     PHPDoc tag @param references unknown parameter $name  
  14     Undefined variable: $name                             
 ------ ------------------------------------------------------ 

 ------ --------------------------------------------------------------------- 
  Line   src/bootstrap.php                                                    
 ------ --------------------------------------------------------------------- 
  7      Method Zero\Hello::greeting() invoked with 1 parameter, 0 required.  
 ------ ---------------------------------------------------------------------

PHPStan 給的錯誤訊息,就可以在執行 PHP 之前預防錯誤發生。

不過有一些比較可惜的地方:

  • PHPStan 一定要吃 autoload 規則,看起來是為了要解 PHP Refelction 問題,所以比較就的程式就 GG 了
  • Hello.php 裡面有個沒使用到的變數 $test 沒有被抓到,不然應該可以再把程式清的更乾淨

沒有留言:

張貼留言