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

  • เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹