ΠΠΎ ΡΠ΅ΡΡ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΡΠ°Π·Π²ΠΎΡ, ΡΠ΅ ΡΠ»ΡΡΠΈ ΠΏΡΠ²ΠΎΡΠΎ ΡΡΠ°Π±ΠΈΠ»Π½ΠΎ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅ Π½Π° ΡΡΠ°ΡΠΈΡΠΊΠΈΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ PHPStan 1.0, ΡΡΠΎ Π²ΠΈ ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π° Π΄Π° ΠΏΡΠΎΠ½Π°ΡΠ΄Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ Π²ΠΎ PHP-ΠΊΠΎΠ΄ΠΎΡ Π±Π΅Π· Π΄Π° Π³ΠΎ ΠΈΠ·Π²ΡΡΠΈΡΠ΅ ΠΈ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΠΎΠ²ΠΈ Π·Π° Π΅Π΄ΠΈΠ½ΠΈΡΠΈ. ΠΡΠΎΠ΅ΠΊΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ Π²ΠΎ PHP ΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΠΈΡΠ°Π½ ΠΏΠΎΠ΄ Π»ΠΈΡΠ΅Π½ΡΠ°ΡΠ° MIT.
ΠΠ½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΡ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° 10 Π½ΠΈΠ²ΠΎΠ° Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°, Π²ΠΎ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΠ΅ ΡΠ»Π΅Π΄Π½ΠΎ Π½ΠΈΠ²ΠΎ Π³ΠΈ ΠΏΡΠΎΡΠΈΡΡΠ²Π° ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° ΠΏΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΡΠΎ ΠΈ ΠΎΠ±Π΅Π·Π±Π΅Π΄ΡΠ²Π° ΠΏΠΎΡΡΡΠΎΠ³ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ:
ΠΡΠΈΠΌΠ΅ΡΠΈ Π½Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π°Π½ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ:
- ΠΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠΈ ΠΊΠΎΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΡΠ°ΡΠ΅, ΡΠΈΠΏΠΎΠ²ΠΈ ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠ°Π·ΠΈΡΠ½ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ.
- ΠΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ ΠΈ Π΄ΠΎΡΡΠ°ΠΏΠ½ΠΎΡΡΠ° Π½Π° ΠΏΠΎΠ²ΠΈΠΊΠ°Π½ΠΈΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈ Π±ΡΠΎΡΠΎΡ Π½Π° Π΄ΠΎΠ½Π΅ΡΠ΅Π½ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ.
- ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π΄Π°Π»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΡ Π²ΡΠ°ΡΠ° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠΎ ΠΈΡΡ ΡΠΈΠΏ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ Π²ΠΎ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈΠΎΡ ΠΈΠ·ΡΠ°Π·.
- ΠΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ ΠΈ Π²ΠΈΠ΄Π»ΠΈΠ²ΠΎΡΡΠ° Π½Π° ΡΠ²ΠΎΡΡΡΠ²Π°ΡΠ° Π΄ΠΎ ΠΊΠΎΠΈ ΡΠ΅ ΠΏΡΠΈΡΡΠ°ΠΏΡΠ²Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΈ Π²ΠΈΡΡΠΈΠ½ΡΠΊΠΈΡΠ΅ ΡΠΈΠΏΠΎΠ²ΠΈ Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΡΠ²ΠΎΡΡΡΠ²Π°ΡΠ°.
- ΠΡΠΎΡΠΎΡ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ sprintf/printf Π²ΠΎ Π±Π»ΠΎΠΊΠΎΡ Π·Π° ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΡΠ΅ Π½ΠΈΠ·Π° Π΅ ΡΠΎΡΠ΅Π½.
- ΠΠΎΡΡΠΎΠ΅ΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π·Π΅ΠΌΠ°ΡΡΠΈ Π³ΠΈ ΠΏΡΠ΅Π΄Π²ΠΈΠ΄ Π±Π»ΠΎΠΊΠΎΠ²ΠΈΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΈ ΠΎΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ ΠΈ ΡΠ°ΠΌΠΊΠΈ Π·Π° ΡΠ°Π·Π³ΡΠ°Π½ΡΠ²Π°ΡΠ΅.
- ΠΠ΅ΡΠΊΠΎΡΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΡΡΠ»Π°ΡΠ° (Π½Π° ΠΏΡ. β(string) βfooβ) ΠΈ ΡΡΡΠΎΠ³ΠΈ ΡΠ΅ΡΡΠΎΠ²ΠΈ (β===" ΠΈ β!==") Π½Π° ΠΏΠΎΠ΄Π°ΡΠΎΡΠΈ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΈ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ΠΈ ΠΊΠΎΠΈ ΡΠ΅ΠΊΠΎΠ³Π°Ρ Π²ΡΠ°ΡΠ°Π°Ρ Π½Π΅ΡΠΎΡΠ½ΠΎ.
ΠΠ»ΡΡΠ½ΠΈ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈ Π²ΠΎ PHPStan 1.0:
- ΠΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ°Π½ΠΎ Π΅ Π½ΠΈΠ²ΠΎΡΠΎ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° β9β, ΠΊΠΎΠ΅ ΡΠ° ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π° ΡΠΏΠΎΡΡΠ΅Π±Π°ΡΠ° Π½Π° ΡΠΈΠΏΠΎΡ βΠΌΠ΅ΡΠ°Π½β, Π½Π°ΠΌΠ΅Π½Π΅Ρ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΈΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΈΠ΅ΠΌ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΎΠ΄ ΡΡΠ½ΠΊΡΠΈΡΠ°ΡΠ°. ΠΠΈΠ²ΠΎΡΠΎ XNUMX Π³ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΠ²Π° Π½Π΅Π±Π΅Π·Π±Π΅Π΄Π½ΠΈΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±ΠΈ Π½Π° βΠΌΠ΅ΡΠ°Π½ΠΎβ, ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ βΠΌΠ΅ΡΠ°Π½ΠΎβ Π½Π° Π΄ΡΡΠ³ ΡΠΈΠΏ, Π½Π°ΡΠ΅ΠΊΡΠ²Π°ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΎΠ΄ ΡΠΈΠΏΠΎΡ βΠΌΠ΅ΡΠ°Π½ΠΈβ ΠΈ ΠΏΡΠΈΡΡΠ°ΠΏ Π΄ΠΎ Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ²ΠΎΡΡΡΠ²Π° Π±ΠΈΠ΄Π΅ΡΡΠΈ ΠΌΠΎΠΆΠ΅Π±ΠΈ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠ°Ρ.
- ΠΠΎΠ½ΡΡΠΎΠ»ΠΈΡΠ°ΡΡΠ΅ Π΄Π°Π»ΠΈ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ Π³ΠΈ ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈΡΠ΅ @phpstan-pure ΠΈ @phpstan-impure.
- Π’ΠΈΠΏ Π°Π½Π°Π»ΠΈΠ·Π° Π²ΠΎ ΠΎΠ±ΠΈΠ΄ΠΈ-ΡΠ°ΡΠΈ-ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΡΠΈ @throws ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ.
- ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ, Π½ΠΎ Π½Π΅ΠΈΡΠΊΠΎΡΠΈΡΡΠ΅Π½ΠΈ Π²Π½Π°ΡΡΠ΅ΡΠ½ΠΈ (ΠΏΡΠΈΠ²Π°ΡΠ½ΠΈ) ΡΠ²ΠΎΡΡΡΠ²Π°, ΠΌΠ΅ΡΠΎΠ΄ΠΈ ΠΈ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠΈ.
- ΠΡΠ΅Π½Π΅ΡΡΠ²Π°ΡΠ΅ Π½Π΅ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈ ΠΏΠΎΠ²ΡΠ°ΡΠ½ΠΈ ΠΏΠΎΠ²ΠΈΡΠΈ Π΄ΠΎ ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅ Π½Π° Π½ΠΈΠ·Π°ΡΠ° ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ array_map ΠΈ usort.
- ΠΠ½ΡΠΏΠ΅ΠΊΡΠΈΡΠ° Π½Π° ΡΠΈΠΏΠΎΠ²ΠΈ Π·Π° ΠΈΡΡΠ΅Π·Π½Π°ΡΠΈ ΠΏΡΠΈΠ±Π΅Π»Π΅ΡΠΊΠΈ Π·Π° ΠΏΠ΅ΡΠ°ΡΠ΅ΡΠ΅.
- ΠΠ°ΠΏΡΠ°Π²Π΅Π½ΠΈ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠΈ Π·Π° ΡΠΈΠΏΠΎΠ²ΠΈ ΠΊΠΎΠΌΠΏΠ°ΡΠΈΠ±ΠΈΠ»Π½ΠΈ ΡΠΎ PHPDocs, ΠΎΠ²ΠΎΠ·ΠΌΠΎΠΆΡΠ²Π°ΡΡΠΈ ΡΠΈΠΏΠΎΠ²ΠΈ ΠΎΠ΄ ΠΏΠΎΡΠ°ΠΊΠΈ Π·Π° Π³ΡΠ΅ΡΠΊΠΈ Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ PHPDocs.
ΠΠ·Π²ΠΎΡ: opennet.ru