前陣子從 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 沒有被抓到,不然應該可以再把程式清的更乾淨