PHPStan 1.0 рдЪреЗ рдкреНрд░рдХрд╛рд╢рди, PHP рдХреЛрдбрд╕рд╛рдареА рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ

рд╕рд╣рд╛ рд╡рд░реНрд╖рд╛рдВрдЪреНрдпрд╛ рд╡рд┐рдХрд╛рд╕рд╛рдирдВрддрд░, рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ PHPStan 1.0 рдЪреЗ рдкрд╣рд┐рд▓реЗ рд╕реНрдерд┐рд░ рдкреНрд░рдХрд╛рд╢рди рдЭрд╛рд▓реЗ, рдЬреЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ PHP рдХреЛрдбрдордзреНрдпреЗ рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рди рдХрд░рддрд╛ рдЖрдгрд┐ рдпреБрдирд┐рдЯ рдЪрд╛рдЪрдгреНрдпрд╛ рди рд╡рд╛рдкрд░рддрд╛ рддреНрд░реБрдЯреА рд╢реЛрдзреВ рджреЗрддреЗ. рдкреНрд░рдХрд▓реНрдк рдХреЛрдб PHP рдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓реЗрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ MIT рдкрд░рд╡рд╛рдиреНрдпрд╛рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ.

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рддрдкрд╛рд╕рдгреАрдЪреЗ 10 рд╕реНрддрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдвреАрд▓ рд╕реНрддрд░ рдорд╛рдЧреАрд▓ рдкрд╛рддрд│реАрдЪреНрдпрд╛ рдХреНрд╖рдорддреЗрдЪрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЛ рдЖрдгрд┐ рдЕрдзрд┐рдХ рдХрдареЛрд░ рддрдкрд╛рд╕рдгреА рдкреНрд░рджрд╛рди рдХрд░рддреЛ:

  • рдореВрд▓рднреВрдд рддрдкрд╛рд╕рдгреА, рдЕрдЬреНрдЮрд╛рдд рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдгреЗ, рдХрд╛рд░реНрдпреЗ рдЖрдгрд┐ рдкрджреНрдзрддреА ($this), рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд▓, рдЖрдгрд┐ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪреА рдЪреБрдХреАрдЪреА рд╕рдВрдЦреНрдпрд╛ рдкрд╛рд╕ рдХрд░рдгреЗ.
  • __call рдЖрдгрд┐ __get рд╕рд╣ рд╢рдХреНрдпрддреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЪрд▓, рдЕрдЬреНрдЮрд╛рдд рдЬрд╛рджреВрдЪреНрдпрд╛ рдкрджреНрдзрддреА рдЖрдгрд┐ рд╡рд░реНрдЧрд╛рдВрдЪреЗ рдЧреБрдгрдзрд░реНрдо рдУрд│рдЦрдгреЗ.
  • рд╕рд░реНрд╡ рдЕрднрд┐рд╡реНрдпрдХреНрддреАрдВрдордзреНрдпреЗ рдЕрдЬреНрдЮрд╛рдд рдкрджреНрдзрддреА рд╢реЛрдзрдгреЗ, $this рджреНрд╡рд╛рд░реЗ рдХреЙрд▓рдкрд░реНрдпрдВрдд рдорд░реНрдпрд╛рджрд┐рдд рдирд╛рд╣реА. PHPDocs рддрдкрд╛рд╕рдд рдЖрд╣реЗ.
  • рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рддрдкрд╛рд╕рдгреЗ рдЖрдгрд┐ рдЧреБрдгрдзрд░реНрдорд╛рдВрдирд╛ рдкреНрд░рдХрд╛рд░ рдирд┐рдпреБрдХреНрдд рдХрд░рдгреЗ.
  • "рдореГрдд" (рдХрдзреАрд╣реА рдХреЙрд▓ рди рдХрд░рддрд╛) рдХреЛрдбрдЪреА рдореВрд▓рднреВрдд рдУрд│рдЦ. рдиреЗрд╣рдореА рдЦреЛрдЯреНрдпрд╛ рдкрд░рдд рдпреЗрдгрд╛рд▒реНрдпрд╛ рдХреЙрд▓реНрд╕рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ рдУрд│рдЦрд╛, "рдЗрддрд░" рдмреНрд▓реЙрдХ рдЬреЗ рдХрдзреАрд╣реА рдлрд╛рдпрд░ рд╣реЛрдд рдирд╛рд╣реАрдд рдЖрдгрд┐ рдкрд░рдд рдЖрд▓реНрдпрд╛рдирдВрддрд░ рдХреЛрдб.
  • рдкрджреНрдзрддреА рдЖрдгрд┐ рдлрдВрдХреНрд╢рдиреНрд╕рдирд╛ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░ рддрдкрд╛рд╕рдд рдЖрд╣реЗ.
  • рдЧрд╣рд╛рд│ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдорд╛рд╣рд┐рддреА рднрд╛рд╖реНрдпрд╛рдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА.
  • рдЪреБрдХреАрдЪреНрдпрд╛ рдпреБрдирд┐рдпрди рдкреНрд░рдХрд╛рд░рд╛рдВрдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА рдЬреЗ рджреЛрди рдХрд┐рдВрд╡рд╛ рдЕрдзрд┐рдХ рдкреНрд░рдХрд╛рд░рд╛рдВрдЪреЗ рд╕рдВрдЧреНрд░рд╣ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛рдд.
  • рдХреЙрд▓рд┐рдВрдЧ рдкрджреНрдзрддреА рдЖрдгрд┐ "рдиреНрдпреБрд▓реЗрдмрд▓" рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рдмрджреНрджрд▓ рдЪреЗрддрд╛рд╡рдгреА.
  • "рдорд┐рд╢реНрд░" рдкреНрд░рдХрд╛рд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рддрдкрд╛рд╕рдд рдЖрд╣реЗ.

    рдУрд│рдЦрд▓реНрдпрд╛ рдЧреЗрд▓реЗрд▓реНрдпрд╛ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕рдорд╕реНрдпрд╛рдВрдЪреА рдЙрджрд╛рд╣рд░рдгреЗ:

    • рдЙрджрд╛рд╣рд░рдгреЗ, рдХреЕрдЪ, рдЯрд╛рдИрдкрд╣рд┐рдВрдЯреНрд╕ рдЖрдгрд┐ рдЗрддрд░ рднрд╛рд╖рд╛ рд░рдЪрдирд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд░реНтАНрдпрд╛ рд╡рд░реНрдЧрд╛рдВрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡.
    • рдХреЙрд▓ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкрджреНрдзрддреА рдЖрдгрд┐ рдХрд╛рд░реНрдпрд╛рдВрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдЖрдгрд┐ рдЙрдкрд▓рдмреНрдзрддрд╛, рддрд╕реЗрдЪ рдЙрддреНрддреАрд░реНрдг рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛.
    • рд░рд┐рдЯрд░реНрди рдПрдХреНрд╕рдкреНрд░реЗрд╢рдирдордзреНрдпреЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реНрдпрд╛рдкреНрд░рдорд╛рдгреЗ рдкрджреНрдзрдд рд╕рдорд╛рди рдкреНрд░рдХрд╛рд░рд╛рд╕рд╣ рдбреЗрдЯрд╛ рдкрд░рдд рдХрд░рддреЗ рд╣реЗ рддрдкрд╛рд╕рдд рдЖрд╣реЗ.
    • рдНрдХреНрд╕реЗрд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдВрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдЖрдгрд┐ рджреГрд╢реНрдпрдорд╛рдирддрд╛ рдЖрдгрд┐ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдШреЛрд╖рд┐рдд рдЖрдгрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рддрдкрд╛рд╕рдгреЗ.
    • рд╕реНрдЯреНрд░рд┐рдВрдЧ рдлреЙрд░рдореЕрдЯрд┐рдВрдЧ рдмреНрд▓реЙрдХрдордзреНрдпреЗ sprintf/printf рдХреЙрд▓реНрд╕рд╡рд░ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреА рд╕рдВрдЦреНрдпрд╛ рдпреЛрдЧреНрдп рдЖрд╣реЗ.
    • рдмреНрд░рдБрдЪрд┐рдВрдЧ рдСрдкрд░реЗрдЯрд░ рдЖрдгрд┐ рд▓реВрдкрджреНрд╡рд╛рд░реЗ рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рдЦрд╛рддреЗ рдмреНрд▓реЙрдХреНрд╕ рдШреЗрдКрди рдЪрд▓рд╛рдВрдЪреЗ рдЕрд╕реНрддрд┐рддреНрд╡.
    • рдирд┐рд░реБрдкрдпреЛрдЧреА рдкреНрд░рдХрд╛рд░ рдХрд╛рд╕реНрдЯ (рдЙрджрд╛. "(рд╕реНрдЯреНрд░рд┐рдВрдЧ) 'foo'") рдЖрдгрд┐ рд╡реЗрдЧрд╡реЗрдЧрд│реНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреНрдпрд╛ рдЖрдгрд┐ рдСрдкрд░реЗрдВрдбрд╕рд╣ рдбреЗрдЯрд╛рд╡рд░ рдХрдареЛрд░ рдЪрд╛рдЪрдгреНрдпрд╛ ("===" рдЖрдгрд┐ "!==") рдЬреЗ рдиреЗрд╣рдореА рдЦреЛрдЯреЗ рдкрд░рдд рдпреЗрддрд╛рдд.

    PHPStan 1.0 рдордзреАрд▓ рдкреНрд░рдореБрдЦ рдирд╡рдХрд▓реНрдкрдирд╛:

    • "9" рдЪреЗрдХ рд▓реЗрд╡реНрд╣рд▓ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЧреЗрд▓реЗ рдЖрд╣реЗ, рдЬреЗ "рдорд┐рд╢реНрд░" рдкреНрд░рдХрд╛рд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рддрдкрд╛рд╕рддреЗ, рд╡рд┐рд╡рд┐рдз рдкреНрд░рдХрд╛рд░рд╛рдВрд╕рд╣ рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рдЪреЗ рдлрдВрдХреНрд╢рди рд░рд┐рд╕реЗрдкреНрд╢рди рдЖрдпреЛрдЬрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЙрджреНрджреЗрд╢рд╛рдиреЗ. рд╕реНрддрд░ XNUMX "рдорд┐рд╢реНрд░" рдЪреНрдпрд╛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╡рд╛рдкрд░рд╛рдВрдирд╛ рдУрд│рдЦрддреЗ, рдЬрд╕реЗ рдХреА "рдорд┐рд╢реНрд░" рдкреНрд░рдХрд╛рд░рд╛рдЪреА рдореВрд▓реНрдпреЗ рджреБрд╕рд░реНтАНрдпрд╛ рдкреНрд░рдХрд╛рд░рд╛рдд рдкрд╛рд╕ рдХрд░рдгреЗ, "рдорд┐рд╢реНрд░" рдкреНрд░рдХрд╛рд░рд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреА рдХреЙрд▓ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЧреБрдгрдзрд░реНрдорд╛рдВрдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреЗ рдХрд╛рд░рдг рддреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕реВ рд╢рдХрддрд╛рдд.
    • @phpstan-pure рдЖрдгрд┐ @phpstan-рдЕрд╢реБрджреНрдз рднрд╛рд╖реНрдп рд╡рд╛рдкрд░реВрди рд╕рдорд╛рди рдлрдВрдХреНрд╢рди рдХреЙрд▓рд╕рд╛рдареА рд░рд┐рдЯрд░реНрди рд╡реНрд╣реЕрд▓реНрдпреВ рдПрдХрд╕рд╛рд░рдЦреА рдЖрд╣реЗрдд рдХреА рдирд╛рд╣реА рд╣реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рд╛.
    • @throws рднрд╛рд╖реНрдпреЗ рд╡рд╛рдкрд░реВрди рдЯреНрд░рд╛рдп-рдХреЕрдЪ-рдлрд╛рдпрдирд▓ рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрдордзреНрдпреЗ рдЯрд╛рдЗрдк рд╡рд┐рд╢реНрд▓реЗрд╖рдг.
    • рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рдВрддреБ рди рд╡рд╛рдкрд░рд▓реЗрд▓реЗ рдЕрдВрддрд░реНрдЧрдд (рдЦрд╛рдЬрдЧреА) рдЧреБрдгрдзрд░реНрдо, рдкрджреНрдзрддреА рдЖрдгрд┐ рд╕реНрдерд┐рд░рд╛рдВрдХрд╛рдВрдЪреА рдУрд│рдЦ.
    • array_map рдЖрдгрд┐ usort рд╕рд╛рд░рдЦреНрдпрд╛ рдЕтАНреЕрд░реЗ рдлрдВрдХреНрд╢рдиреНрд╕рд╡рд░ рд╡рд┐рд╕рдВрдЧрдд рдХреЙрд▓рдмреЕрдХ рдкрд╛рд╕ рдХрд░рдгреЗ.
    • рдЧрд╣рд╛рд│ рдЯрд╛рдИрдкрд╣рд┐рдВрдЯ рднрд╛рд╖реНрдпрд╛рдВрд╕рд╛рдареА рдкреНрд░рдХрд╛рд░ рддрдкрд╛рд╕рдгреА.
    • PHPDocs рд╕рд╣ рд╕реБрд╕рдВрдЧрдд рдкреНрд░рдХрд╛рд░ рдШреЛрд╖рдгрд╛ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдЬреНрдпрд╛рдореБрд│реЗ рддреНрд░реБрдЯреА рд╕рдВрджреЗрд╢рд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░ PHPDocs рдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.

    рд╕реНрддреНрд░реЛрдд: opennet.ru

  • рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛