การเปิดตัว Psalm 3.12 ซึ่งเป็นตัววิเคราะห์แบบคงที่สำหรับภาษา PHP การเปิดตัวอัลฟ่าของ PHP 8.0

บริษัทวิมีโอ การตีพิมพ์ เครื่องวิเคราะห์แบบคงที่รุ่นใหม่ สดุดี 3.12ซึ่งช่วยให้คุณระบุข้อผิดพลาดทั้งที่เห็นได้ชัดและที่ละเอียดอ่อนในโค้ด PHP รวมถึงแก้ไขข้อผิดพลาดบางประเภทโดยอัตโนมัติ ระบบนี้เหมาะสำหรับการระบุปัญหาทั้งในโค้ดเดิมและโค้ดที่ใช้คุณสมบัติสมัยใหม่ที่นำมาใช้ใน PHP สาขาใหม่ รหัสโครงการเขียนด้วย PHP และ จัดจำหน่ายโดย ภายใต้ใบอนุญาต MIT

สดุดีระบุถึงปัญหาส่วนใหญ่ที่เกี่ยวข้องกับการใช้ประเภทที่ไม่ถูกต้องตลอดจนปัญหาต่างๆ ข้อผิดพลาดทั่วไป. ตัวอย่างเช่น รองรับคำเตือนเกี่ยวกับการผสมตัวแปรประเภทต่างๆ ในนิพจน์ การทดสอบตรรกะที่ไม่ถูกต้อง (เช่น “if ($a && $a) {}”, “if ($a && !$a) {}” และ “ if ( $a) {} elseif ($a) {}") การเริ่มต้นคุณสมบัติอ็อบเจ็กต์ไม่สมบูรณ์ เครื่องวิเคราะห์ทำงานในโหมดมัลติเธรด เป็นไปได้ที่จะทำการสแกนแบบเพิ่มหน่วย ซึ่งจะวิเคราะห์เฉพาะไฟล์ที่มีการเปลี่ยนแปลงตั้งแต่การสแกนครั้งล่าสุด

นอกจากนี้ยังมีเครื่องมือการเขียนโปรแกรมที่ปลอดภัยไว้ให้บริการ ใช้ คำอธิบายประกอบในรูปแบบ ด๊อกบล็อค (“/** @var Type */”) เพื่อให้ข้อมูลเกี่ยวกับประเภทตัวแปร ค่าที่ส่งคืน พารามิเตอร์ฟังก์ชัน คุณสมบัติของวัตถุ นอกจากนี้ยังสนับสนุนการกำหนดรูปแบบการใช้งานประเภทและการใช้คำสั่ง assert ตัวอย่างเช่น:

/** @var string|null */
$a = ฟู();

/** @var string $a */
echo strpos($a, 'สวัสดี');

/** @ สดุดี-assert-if-true B $a */
ฟังก์ชั่น isValidB(A $a) : bool {
ส่งคืน $a อินสแตนซ์ของ B && $a->isValid();
}

เพื่อกำจัดปัญหาที่พบโดยอัตโนมัติจึงมียูทิลิตี้ Psalter ซึ่งรองรับปลั๊กอินและ ช่วยให้ แก้ไขปัญหาโค้ดทั่วไป เพิ่มคำอธิบายประกอบประเภท และดำเนินการแก้ไข เช่น การย้ายคลาสจากเนมสเปซหนึ่งไปยังอีกเนมสเปซ การย้ายวิธีการระหว่างคลาส และการเปลี่ยนชื่อคลาสและวิธีการ

ในสดุดีฉบับใหม่ นำไปใช้ ตัวเลือก "--taint-analysis" ช่วยให้คุณสามารถติดตามความสัมพันธ์ระหว่างพารามิเตอร์อินพุตที่ได้รับจากผู้ใช้ (เช่น $_GET['name']) และการใช้งานในสถานที่ที่ต้องมีอักขระหลีก (เช่น echo " $ชื่อ ") รวมถึงผ่านห่วงโซ่การติดตามของการมอบหมายระดับกลางและการเรียกใช้ฟังก์ชัน การใช้อาร์เรย์ที่เชื่อมโยง $_GET, $_POST และ $_COOKIE ถือเป็นแหล่งข้อมูลที่อาจเป็นอันตราย แต่ก็เป็นไปได้เช่นกัน คำนิยาม แหล่งที่มาของตัวเอง การดำเนินการที่ต้องมีการติดตาม Escape รวมถึงการดำเนินการเอาต์พุตที่สร้างเนื้อหา HTML เพิ่มส่วนหัว HTTP หรือดำเนินการคำสั่ง SQL

การตรวจสอบความถูกต้องจะใช้เมื่อใช้ฟังก์ชันต่างๆ เช่น echo, exec, include และ header เมื่อวิเคราะห์ความจำเป็นในการหลบหนี ประเภทข้อมูล เช่น ข้อความ สตริงที่มีโค้ด SQL, HTML และเชลล์ สตริงที่มีพารามิเตอร์การรับรองความถูกต้องจะถูกนำมาพิจารณาด้วย โหมดที่นำเสนอช่วยให้คุณสามารถระบุช่องโหว่ในโค้ดที่นำไปสู่การเขียนสคริปต์ข้ามไซต์ (XSS) หรือการทดแทน SQL

นอกจากนี้ยังสามารถสังเกตได้ เริ่มต้น การทดสอบอัลฟ่าของสาขา PHP 8.0 ใหม่ มีกำหนดการเปิดตัวในวันที่ 26 พฤศจิกายน คาดว่าจะมีสิ่งต่อไปนี้ในสาขาใหม่: นวัตกรรมในฐานะที่เป็น:

  • เพิ่มพลัง คอมไพเลอร์ JITซึ่งการใช้จะช่วยเพิ่มผลผลิต
  • สนับสนุน ประเภทสหภาพแรงงานกำหนดคอลเลกชันตั้งแต่สองประเภทขึ้นไป (เช่น “ฟังก์ชั่นสาธารณะ foo(Foo|Bar $input): int|float;”)
  • สนับสนุน คุณลักษณะ (คำอธิบายประกอบ) ที่อนุญาตให้คุณผูกข้อมูลเมตา (เช่นข้อมูลประเภท) เข้ากับคลาสโดยไม่ต้องใช้ไวยากรณ์ Docblock
  • ไวยากรณ์ที่สั้นลง คำจำกัดความของคลาส ช่วยให้คุณสามารถรวมคำจำกัดความของตัวสร้างและคุณสมบัติได้
  • ประเภทการคืนสินค้าใหม่ - คงที่.
  • ประเภทใหม่ - ผสมซึ่งสามารถใช้เพื่อกำหนดว่าฟังก์ชันยอมรับพารามิเตอร์ประเภทต่างๆ หรือไม่
  • การแสดงออก โยน เพื่อจัดการกับข้อยกเว้น
  • แผนที่อ่อนแอ เพื่อสร้างวัตถุที่สามารถเสียสละได้ในระหว่างการรวบรวมขยะ (เช่น เพื่อจัดเก็บแคชที่ไม่จำเป็น)
  • โอกาส ใช้นิพจน์ “::class” สำหรับวัตถุ (คล้ายกับการเรียก get_class())
  • โอกาส คำจำกัดความใน catch block ของข้อยกเว้นที่ไม่ได้ผูกไว้กับตัวแปร
  • โอกาส ทิ้งเครื่องหมายจุลภาคไว้หลังองค์ประกอบสุดท้ายในรายการพารามิเตอร์ฟังก์ชัน
  • อินเทอร์เฟซใหม่ สตริงได้ เพื่อระบุประเภทสตริงหรือข้อมูลใด ๆ ที่สามารถแปลงเป็นสตริงได้ (ซึ่งมีเมธอด __toString())
  • ลูกเล่นใหม่ str_มี()ซึ่งเป็นอะนาล็อกแบบง่ายของ strpos สำหรับระบุการเกิดขึ้นของสตริงย่อย เช่นเดียวกับฟังก์ชัน str_starts_with() และ str_ends_with() สำหรับตรวจสอบการจับคู่ที่จุดเริ่มต้นและจุดสิ้นสุดของสตริง
  • เพิ่มคุณสมบัติแล้ว fdiv()ซึ่งดำเนินการหารโดยไม่มีข้อผิดพลาดเมื่อหารด้วยศูนย์
  • เปลี่ยน ตรรกะการเข้าร่วมสตริง ตัวอย่างเช่น นิพจน์ 'echo "sum:" $a + $b' ก่อนหน้านี้ถูกตีความว่าเป็น 'echo ("sum: " . $a) + $b' และใน PHP 8 จะถือว่าเป็น 'echo "sum: " ($a + $b)'.
  • กระชับขึ้น การตรวจสอบการดำเนินการทางคณิตศาสตร์และบิต เช่น นิพจน์ "[] % [42]" และ "$object + 4" จะส่งผลให้เกิดข้อผิดพลาด
  • ดำเนินการแล้ว อัลกอริธึมการเรียงลำดับที่เสถียรซึ่งรักษาลำดับของค่าที่เหมือนกันในการรันที่แตกต่างกัน

ที่มา: opennet.ru

เพิ่มความคิดเห็น