在 ShipMonk,我們一直追求極致的代碼質(zhì)量。雖然 PHPStan 已經(jīng)非常強大,但我們?nèi)匀话l(fā)現(xiàn)一些潛在的問題無法被標(biāo)準(zhǔn)規(guī)則捕捉到。為了解決這個問題,我們開發(fā)了一套自己的 PHPStan 規(guī)則,并將其開源,希望能夠幫助更多的開發(fā)者。
composer在線學(xué)習(xí)地址:學(xué)習(xí)地址
ShipMonk PHPStan Rules 提供了大約 40 個額外的規(guī)則,涵蓋了各種常見的編碼錯誤和不良實踐。例如,它可以幫助你:
- 禁止比較不可比較的類型,避免意外的對象比較。
- 強制使用 match 語句處理枚舉,確保所有枚舉值都被正確處理。
- 禁止在可調(diào)用對象中拋出檢查型異常,避免潛在的異常處理問題。
- 強制在返回迭代器時指定 $preserve_keys 參數(shù),避免數(shù)據(jù)丟失。
- 禁止在未聲明為整數(shù)的變量上使用自增/自減運算符,避免類型錯誤。
- 等等…
安裝
使用 composer 安裝 ShipMonk PHPStan Rules 非常簡單:
composer require --dev shipmonk/phpstan-rules
然后,你需要將 rules.neon 文件包含到你的 PHPStan 配置文件中:
立即學(xué)習(xí)“PHP免費學(xué)習(xí)筆記(深入)”;
# phpstan.neon includes: - vendor/shipmonk/phpstan-rules/rules.neon
配置
你可以根據(jù)自己的需求,輕松地禁用或重新配置任何規(guī)則。例如,要禁用 enforceReadonlyPublicProperty 規(guī)則,可以這樣配置:
parameters: shipmonkRules: enforceReadonlyPublicProperty: enabled: false
或者,你可以禁用所有規(guī)則,然后只啟用你需要的規(guī)則:
parameters: shipmonkRules: enableAllRules: false allowComparingOnlyComparableTypes: enabled: true
示例:allowComparingOnlyComparableTypes 規(guī)則
這個規(guī)則禁止使用比較運算符(>, =, )比較 int|string|float|DateTimeInterface 以外的類型,或者包含可比較類型的相同大小的元組。它主要針對意外的對象、枚舉或數(shù)組比較,這些比較在 PHP 中是有效的,但往往會產(chǎn)生意想不到的結(jié)果。
function example1(Money $fee1, Money $fee2) { if ($fee1 > $fee2) {} // 比較對象是被禁止的 } new DateTime() > '2040-01-02'; // 比較不同類型是被禁止的 200 > '1e2'; // 比較不同類型是被禁止的
優(yōu)勢與實際應(yīng)用
ShipMonk PHPStan Rules 的主要優(yōu)勢在于:
- 提高代碼質(zhì)量: 通過更嚴格的類型檢查和代碼規(guī)范,減少潛在的錯誤。
- 減少運行時錯誤: 在開發(fā)階段發(fā)現(xiàn)并修復(fù)錯誤,避免在生產(chǎn)環(huán)境中出現(xiàn)問題。
- 提高開發(fā)效率: 通過自動化代碼審查,減少手動檢查的時間。
- 促進代碼一致性: 強制執(zhí)行統(tǒng)一的代碼風(fēng)格,提高代碼可讀性和可維護性。
在實際應(yīng)用中,ShipMonk PHPStan Rules 可以幫助你構(gòu)建更健壯、更可靠的 PHP 應(yīng)用程序。它可以應(yīng)用于各種類型的項目,無論是小型個人項目還是大型企業(yè)級應(yīng)用。通過持續(xù)集成和自動化代碼審查,可以確保代碼質(zhì)量始終保持在高水平。
總而言之,ShipMonk PHPStan Rules 是一套非常有價值的 PHPStan 規(guī)則,可以幫助你顯著提升代碼質(zhì)量,減少運行時錯誤,并提高開發(fā)效率。如果你追求卓越的代碼質(zhì)量,那么 ShipMonk PHPStan Rules 絕對值得一試。