ለPHP ኮድ የማይለዋወጥ ተንታኝ የPHPHPTAN 1.0 መልቀቅ

ከስድስት ዓመታት እድገት በኋላ የ PHPStan 1.0 static analyzer የመጀመሪያው የተረጋጋ ልቀት ተከናውኗል ፣ ይህም በ PHP ኮድ ውስጥ ሳያደርጉት እና የክፍል ሙከራዎችን በመጠቀም ስህተቶችን እንዲያገኙ ያስችልዎታል። የፕሮጀክት ኮድ በ PHP የተፃፈ እና በ MIT ፈቃድ ስር ይሰራጫል።

ተንታኙ 10 የማረጋገጫ ደረጃዎችን ያቀርባል፣ በዚህ ውስጥ እያንዳንዱ ቀጣይ ደረጃ የቀደመውን አቅም የሚያሰፋ እና የበለጠ ጥብቅ ፍተሻዎችን ይሰጣል፡

  • መሰረታዊ ፍተሻዎች፣ ያልታወቁ ክፍሎችን፣ ተግባራትን እና ዘዴዎችን (ይህን) በመግለጽ፣ ያልተገለጹ ተለዋዋጮች እና የተሳሳተ የነጋሪዎች ብዛት ማለፍ።
  • ምናልባት ያልተገለጹ ተለዋዋጮችን፣ ያልታወቁ አስማታዊ ዘዴዎችን እና የክፍል ንብረቶችን ከ__ጥሪ እና __ማግኘት ጋር ማግኘት።
  • በሁሉም አገላለጾች ውስጥ ያልታወቁ ዘዴዎችን ማወቅ፣ በዚህ በ$ በዚህ ጥሪ ብቻ አይወሰንም። PHPDocsን በመፈተሽ ላይ።
  • የመመለሻ ዓይነቶችን መፈተሽ እና ዓይነቶችን ወደ ንብረቶች መመደብ።
  • መሰረታዊ የ"ሙት" (በፍፁም አልተጠራም) ኮድ ማግኘት። ሁልጊዜ በውሸት የሚመለሱ፣ ሌላ የሚከለክሉትን በፍፁም የማይተኩሱ እና ከተመለሱ በኋላ ኮድ የሚደረጉ ጥሪዎችን ያግኙ።
  • ወደ ዘዴዎች እና ተግባራት የተላለፉ የክርክር ዓይነቶችን መፈተሽ።
  • ስለጎደሉ አይነት መረጃ ማብራሪያዎች ማስጠንቀቂያ።
  • የሁለት ወይም ከዚያ በላይ ዓይነቶች ስብስቦችን ስለሚገልጹ ልክ ያልሆኑ የሕብረት ዓይነቶች ማስጠንቀቂያ።
  • የመደወያ ዘዴዎችን እና ንብረቶችን ከ "ሊበላሽ" ዓይነቶች ጋር ስለማግኘት ማስጠንቀቂያ።
  • የ "ድብልቅ" አይነት አጠቃቀምን መፈተሽ.

    ተለይተው የታወቁ ችግሮች ምሳሌዎች፡-

    • ለአብነት፣ ለመያዝ፣ ለጽሕፈት ጽሑፎች እና ለሌሎች የቋንቋ ግንባታዎች የሚያገለግሉ ክፍሎች መኖር።
    • የተጠሩት ዘዴዎች እና ተግባራት መኖር እና መገኘት, እንዲሁም የክርክር ብዛት አለፉ.
    • አንድ ዘዴ በመመለሻ መግለጫው ላይ ከተገለጸው ተመሳሳይ ዓይነት ጋር መረጃን የሚመልስ መሆኑን ማረጋገጥ።
    • የንብረቶቹ መኖር እና ታይነት በንብረቶቹ ውስጥ ጥቅም ላይ የዋሉ የታወጁ እና ትክክለኛ የውሂብ አይነቶች ማረጋገጫ።
    • በሕብረቁምፊ ቅርጸት ወደ sprintf/printf ጥሪዎች የተላለፉ የመለኪያዎች ብዛት ትክክለኛነት።
    • በቅርንጫፍ ኦፕሬተሮች እና loops የተሰሩ ብሎኮችን ከግምት ውስጥ በማስገባት የተለዋዋጮች መኖር።
    • የማይጠቅሙ የጽሕፈት መኪናዎች (እንደ "(string) 'foo'" እና ጥብቅ ፍተሻዎች ("===" እና "!==") የተለያዩ አይነት እና ኦፔራዎች ባሉበት ውሂብ ላይ ሁልጊዜ ወደ ሐሰት የሚመለሱ።

    የ PHPStan 1.0 ቁልፍ ፈጠራዎች፡-

    • የቼክ ደረጃ "9" ተተግብሯል, ይህም "የተደባለቀ" አይነት አጠቃቀምን ይፈትሻል, ይህም ከተለያዩ ዓይነቶች ጋር መለኪያዎችን በስራው መቀበልን ለማደራጀት የታሰበ ነው. ዘጠነኛው ደረጃ የ"ድብልቅ" አጠቃቀሞችን ያጋልጣል፣ ለምሳሌ "የተደባለቁ" አይነት እሴቶችን ለሌላ አይነት ማስተላለፍ፣ የአይነት ዘዴዎችን "ድብልቅ" መጥራት እና ንብረቶቹን ማግኘት ላይኖር ይችላል ምክንያቱም።
    • @ phpstan-pure እና @phpstan-impure ማብራሪያዎችን በመጠቀም ተመላሽ እሴት መታወቂያዎችን ለተመሳሳይ ተግባር ጥሪዎች ቁጥጥር ያደርጋል።
    • @throws ማብራሪያዎችን በመጠቀም በ try-catch-በመጨረሻ ይገነባል።
    • የተገለጹ ግን ጥቅም ላይ ያልዋሉ ውስጣዊ (የግል) ንብረቶችን ፣ ዘዴዎችን እና ቋሚዎችን መለየት።
    • እንደ array_map እና usort ላሉ የድርድር ተግባራት ተኳሃኝ ያልሆኑ ጥሪዎችን ማስተላለፍ።
    • ለጠፉ የትየባ ማብራሪያዎች ፍተሻ ይተይቡ።
    • የዓይነት መግለጫዎች ከ PHPDocs ጋር ተኳሃኝ ሆነው ተደርገዋል፣ ይህም PHPDocs ከስህተት መልዕክቶች አይነቶችን እንዲጠቀም ያስችለዋል።

    ምንጭ: opennet.ru

  • አስተያየት ያክሉ