前陣子從 gslin 那邊看到 PHPStan 這個工具,剛好手上有需要測試的程式,就拿來掃一掃。常見的問題大多都可以抓到,甚至連 doc comment 有錯誤也會抓出來。
下面弄個個 demo code 讓大家稍微看一下實際狀況。
Hello.php:
<?php
namespace Zero;
class Hello
{
    /**
     * @param array $name
     */
    public function greeting(): void
    {
        $test = '123';
        echo "Hello $namen";
    }
}
bootstrap.php:
<?php
require __DIR__ . '/../vendor/autoload.php';
$hello = new ZeroHello();
$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 ZeroHello::greeting() invoked with 1 parameter, 0 required.  
 ------ ---------------------------------------------------------------------
從 PHPStan 給的錯誤訊息,就可以在執行 PHP 之前預防錯誤發生。
不過有一些比較可惜的地方:
- PHPStan 一定要吃 autoload 規則,看起來是為了要解 PHP Refelction 問題,所以比較就的程式就 GG 了
 - Hello.php 裡面有個沒使用到的變數 $test 沒有被抓到,不然應該可以再把程式清的更乾淨