經過六年的開發,靜態分析器 PHPStan 1.0 的第一個穩定版本發布了,它允許您在不執行 PHP 程式碼和使用單元測試的情況下查找 PHP 程式碼中的錯誤。 該專案程式碼是用 PHP 編寫的,並根據 MIT 許可證分發。
此分析器提供 10 個等級的檢查,其中每個後續等級都會擴展前一個等級的功能並提供更嚴格的檢查:
已發現的潛在問題的範例:
- 在instanceof、catch、typehints 和其他語言構造中使用的類別的存在。
- 所呼叫的方法和函數的存在和可用性,以及傳遞的參數數量。
- 檢查該方法傳回的資料類型是否與傳回表達式中定義的類型相同。
- 正在存取的屬性的存在和可見性,並檢查屬性中使用的聲明和實際資料類型。
- 字串格式化區塊中傳遞給 sprintf/printf 呼叫的參數數量是正確的。
- 變數的存在考慮到由分支運算子和循環形成的區塊。
- 對不同類型和操作數的資料進行無用的類型轉換(例如“(string) 'foo'”)和嚴格測試(“===”和“!==”)總是會傳回 false。
PHPStan 1.0 的主要創新:
- 已實現“9”檢查級別,檢查“混合”類型的使用,旨在組織函數接收不同類型的參數。 XNUMX級標識「混合」的不安全使用,例如將「混合」類型的值傳遞給另一種類型,呼叫「混合」類型的方法,以及存取其屬性,因為它們可能不存在。
- 使用@phpstan-pure和@phpstan-impure註解控制相同函數呼叫的回傳值是否相同。
- 使用 @throws 註解在 try-catch-finally 建構中進行類型分析。
- 識別已定義但未使用的內部(私有)屬性、方法和常數。
- 將不相容的回呼傳遞給陣列函數,例如 array_map 和 usort。
- 類型檢查是否缺少類型提示註釋。
- 使類型聲明與 PHPDocs 相容,允許在 PHPDocs 中使用錯誤訊息中的類型。
來源: opennet.ru