WordPress & PHP 8 – ความเข้ากันได้ & ประโยชน์!
เผยแพร่แล้ว: 2021-01-04ผู้ที่ชื่นชอบเทคโนโลยีส่วนใหญ่ตื่นเต้นกับ PHP 8.0 และแน่นอนว่าการเปลี่ยนแปลงครั้งนี้ยิ่งใหญ่มาก ทุกคนจะใช้เวลาพอสมควรเพื่อทำความเข้าใจความเข้ากันได้ การกำหนดค่า ประโยชน์ ฯลฯ ของ PHP 8 และหนึ่งในคำถามที่ใหญ่ที่สุดที่ผุดขึ้นมาคือ – “ WordPress เข้ากันได้กับ PHP 8 อยู่แล้ว และหากไม่เป็นเช่นนั้น ต้องดำเนินการอะไรบ้าง”
ทันทีที่เปิดตัว PHP 8 เวลาที่ผู้เชี่ยวชาญของเราจะดำดิ่งสู่ระดับการทดสอบที่ลึกที่สุด และผลลัพธ์ก็อาจทำให้ทุกคนตกใจได้! ใช่ ตอนนี้เรารู้ทุกอย่างแล้วและรู้สึกยินดีที่ได้อวดรายงานและผลการชิมของเรา
ไม่เพียงแค่เราจะแสดงสิ่งที่เปลี่ยนแปลงไปทั้งหมด แต่ยังให้คำแนะนำที่ชัดเจนว่าคุณควรอัปเดตเป็น PHP 8 หรือไม่
การเปลี่ยนแปลงครั้งใหญ่ใน PHP 8: แต่ทำไม?
PHP 8 เป็นการอัปเดตครั้งใหญ่ของ PHP และเป็นเรื่องปกติที่จะลบเชิงลบในเวอร์ชันหลักออกจากเวอร์ชันรองล่าสุด สำหรับ PHP 8 ที่มีคนพูดถึงมาก การเปลี่ยนแปลงที่สำคัญหลายอย่างได้ลดลงในเวอร์ชัน 7.* ก่อนหน้า
ดังนั้น สำหรับโครงการที่ได้รับการปรับปรุงอย่างตั้งใจในช่วงหลายปีที่ผ่านมา การแก้ไข API ที่ถูกละเมิด จึงไม่ยากที่จะอัพเกรดเลย ตามความจริงแล้ว เวอร์ชัน PHP 7.* ได้สังเกตเห็นการเลิกใช้งานที่ใหญ่กว่ามาก ซึ่งแตกต่างจาก PHP เวอร์ชันก่อนหน้า
เราจะบอกว่า PHP 5.6 ถึง PHP 7 เป็นการย้ายข้อมูลที่ค่อนข้างง่าย แต่การเปลี่ยนจาก 7.x เป็น 8 อาจค่อนข้างเจ็บปวด โดยเฉพาะอย่างยิ่งสำหรับ codebases รุ่นเก่า รวมถึง WordPress นอกเหนือจากปลั๊กอินที่มีอยู่หลายตัว
แน่นอนว่าสำหรับ codebase ที่พิมพ์อย่างดีหรือ codebase ที่เป็นปัจจุบันด้วย PHP เวอร์ชันล่าสุด ปัญหาใหญ่จะไม่เกิดขึ้น อย่างไรก็ตาม ความจริงก็คือ WordPress ไม่ใช่ codebase แบบนั้น
WordPress เข้ากันได้กับ PHP 8 แล้วหรือยัง?
พูดตามตรง บางที WordPress อาจเข้ากันได้กับ PHP 8 อยู่แล้ว แต่การปิดผนึกคำเหล่านั้นเป็นไปไม่ได้ WordPress ตั้งเป้าหมายให้เข้ากันได้กับ PHP เวอร์ชันล่าสุด เสมอ อย่างไรก็ตาม เราได้วิเคราะห์ข้อกังวลที่ใหญ่ที่สุดอย่างลึกซึ้งในคู่มือนี้ในภายหลัง
เราได้ทำงานที่ยอดเยี่ยมในการค้นหาวิธีแก้ไขที่สมบูรณ์แบบสำหรับปัญหาความเข้ากันได้ส่วนใหญ่ที่สามารถพบได้โดยใช้กลยุทธ์ที่มี เราจะเจาะลึกลงไปถึงสิ่งที่มีอยู่ทั้งหมดและปัญหาที่เกิดขึ้นกับพวกเขาอย่างแน่นอน
การเปลี่ยนแปลงประสิทธิภาพอะไรจะเกิดขึ้น?
คุณลักษณะสำคัญที่อาจน่าตื่นเต้นที่มาพร้อมกับ PHP 8 คือการรวบรวมและการดีบัก JIT (ทันเวลา) ดังที่เราทราบ PHP เป็นภาษาที่แปลแล้ว ซึ่งหมายความว่ามันถูกแปลเป็นรหัสเครื่องเมื่อทำงาน
JIT ติดตามโค้ดที่ใช้บ่อยและทำงานเพื่อเพิ่มประสิทธิภาพการแปลรหัสเครื่องเพื่อให้ใช้ซ้ำได้ ในตอนนี้ อาจส่งผลให้มีการปรับปรุงประสิทธิภาพอย่างมากสำหรับฟังก์ชันการทำงานที่กำหนด
การรวม JIT ไว้ในภาษาต่างๆ เช่น JavaScript ได้ก่อให้เกิดแอปพลิเคชั่นใหม่จำนวนมากในอดีต ตัวอย่างเช่น เครื่องเสมือนที่ทำงานใน JS คงจะเกินจินตนาการในช่วงแรกๆ ของเว็บ งานบางอย่างที่จำเป็นต้องติดตั้งโมดูลบนเซิร์ฟเวอร์ในอดีตนั้นสามารถนำไปใช้ได้จริงโดยใช้ไลบรารี PHP หลัก
ในขณะนี้ การยกระดับประสิทธิภาพที่แท้จริงสำหรับเว็บแอปอย่าง WordPress นั้นน้อยมาก นอกจากนั้น จะต้องใช้เวลามากก่อนที่นักพัฒนาซอฟต์แวร์หรือผู้ใช้ WordPress ทั่วไปจะได้รับประโยชน์จากคุณลักษณะใหม่นี้
มีคุณสมบัติใหม่อื่น ๆ อีกหลายอย่างที่จะช่วยให้ชีวิตของนักพัฒนาง่ายขึ้น ไม่น่าเป็นไปได้ที่สิ่งเหล่านี้จะถูกใช้ในธีม WP และปลั๊กอินสำหรับอนาคตอันใกล้ เพราะส่วนใหญ่จะทำลายความเข้ากันได้กับเวอร์ชันก่อนหน้าของ PHP ที่ยังคงใช้งานโดยไซต์ WordPress หลายแห่ง
จะอัปเดต PHP สำหรับไซต์ WordPress ของคุณได้อย่างไร
ในคู่มือนี้ เราจะอธิบายว่าคุณสามารถอัปเดต PHP เป็นเวอร์ชันล่าสุดได้อย่างสะดวกเพียงใด ที่สำคัญที่สุดคือ โดยไม่ทำลายไซต์ WordPress ของคุณ
หากคุณอยากรู้เส้นทาง ให้ตรวจสอบเวอร์ชัน PHP ปัจจุบันของคุณ จากนั้นอัปเดต WordPress เป็นเวอร์ชันใหม่ล่าสุด หลังจากนั้น ติดตั้ง “one.com PHP scanner” และเรียกใช้การสแกนเพื่อแก้ไขปัญหาที่อาจเกิดขึ้น นอกจากนี้ อัปเดต PHP เป็นเวอร์ชันล่าสุด และตรวจสอบว่าไซต์ของคุณทำงานตามที่คาดไว้หรือไม่
มาแสดงกระบวนการทั้งหมด
ขั้นตอนที่ 1: ตรวจสอบเวอร์ชัน PHP ปัจจุบันของคุณ
ในตอนเริ่มต้น คุณต้องตรวจสอบว่าคุณใช้ PHP เวอร์ชันใดอยู่ คุณสามารถรับข้อมูลเวอร์ชัน PHP ปัจจุบันของเว็บไซต์ของคุณได้จาก หน้า phpinfo
หากคุณกำลังใช้งาน cPanel คุณสามารถดูเวอร์ชัน PHP ได้จากบทความ วิธีการดูและเปลี่ยนเวอร์ชัน PHP ใน cPanel
ในกรณีที่คุณใช้ PHP เวอร์ชัน 7.3 ขึ้นไป ทุกอย่างก็เรียบร้อย สำหรับผู้ที่มี PHP 7.2 จำเป็นต้องอัปเดต โปรดหวงแหนถึงขั้นตอนที่ 2
ขั้นตอนที่ 2: อัปเดต WordPress เป็นเวอร์ชันล่าสุด
ตรวจสอบให้แน่ใจว่า WordPress core และปลั๊กอินและธีมทั้งหมดได้รับการอัปเดตเป็นเวอร์ชันล่าสุด หากคุณต้องการหลีกเลี่ยงการทำงานผิดพลาด
- ลงชื่อเข้าใช้ WordPress Admin แล้ว คลิก Dashboard > Updates
- ตรวจสอบว่าคุณได้ติดตั้ง WordPress เวอร์ชันล่าสุดหรือไม่ และธีมและปลั๊กอินทั้งหมดเป็นเวอร์ชันล่าสุด อัปเดต WordPress ของคุณเป็นเวอร์ชันล่าสุดทันที
ขั้นตอนที่ 3: ติดตั้ง “เครื่องสแกน PHP one.com”
- ใน ผู้ ดูแลระบบ WordPress ของคุณ ให้ แตะ one.com > Plugins
- ค้นหา เครื่องสแกน PHP ของ one.com แล้ว แตะติดตั้ง ทันที
- ตอนนี้ คลิก เปิดใช้งาน และไปยังขั้นตอนถัดไป
ขั้นตอนที่ 4: เรียกใช้การสแกนและแก้ไขปัญหาที่อาจเกิดขึ้น
- ในเมนูด้านซ้าย ให้แตะ เครื่อง สแกน PHP
- แตะ PHP เวอร์ชัน 7.4 จากนั้นแตะ " ธีมและปลั๊กอิน ทั้งหมด" จากนั้น แตะ เริ่ม การ สแกน
- คุณสามารถดำเนินการได้เมื่อการสแกนเสร็จสิ้น
- คุณสามารถมีสามผลลัพธ์:
– เข้ากันได้ = หมายความว่าทุกอย่างดี!
– คำเตือน = หมายความว่าควรใช้งานได้ แต่อาจมีปัญหากับเวอร์ชัน PHP ที่กำลังจะมีขึ้น
– Error = ไม่ค่อยดี จะทำให้เกิดปัญหาหลังอัพเดทแน่นอน
แก้ไขธีมหรือปลั๊กอินที่อ่านข้อผิดพลาด โดยอัปเดตเป็นเวอร์ชันล่าสุดหรือแทนที่ด้วยปลั๊กอินอื่นที่มีฟังก์ชันการทำงานเดียวกัน
เคล็ดลับ: เราขอแนะนำให้คุณใช้เฉพาะปลั๊กอินที่ใช้ปลั๊กอินที่ได้รับการอัปเดตเป็นประจำและไม่มีปัญหาความเข้ากันได้กับ WordPress เวอร์ชันล่าสุด นอกจากนั้น การนำปลั๊กอินที่ไม่ต้องการออกเพื่อเพิ่มประสิทธิภาพของไซต์ถือเป็นแนวทางปฏิบัติที่ดี
ขั้นตอนที่ 5: อัปเดต PHP เป็นเวอร์ชัน 8.0
ตอนนี้คุณพร้อมที่จะอัปเดต PHP แล้ว เราแนะนำให้เปิดข้อความแสดงข้อผิดพลาด PHP พร้อมกัน ในกรณีที่รหัสมีปัญหา คุณจะเห็นข้อความแสดงข้อผิดพลาดที่แจ้งให้คุณทราบถึงสาเหตุของรหัสและตำแหน่งที่แน่นอนของรหัส
- ในแผงควบคุม ให้กลับไปที่ การตั้งค่า PHP และฐาน ข้อมูล
- เลื่อนลงไปที่ ข้อความแสดงข้อผิด พลาด PHP
- คลิก อัปเดต หลังจากตั้งค่าข้อความแสดงข้อผิดพลาด เป็น เปิด
- ด้านล่างนี้โดยตรง เปลี่ยนเวอร์ชันแล้ว แตะ อัปเด ต
ขั้นตอนที่ 6: ตรวจสอบว่าเว็บไซต์ของคุณทำงานตามที่คาดไว้หรือไม่
ตอนนี้ คุณได้อัปเดตเวอร์ชัน PHP แล้ว และจะ ใช้เวลาอย่างน้อย 20 นาที ก่อนการเปลี่ยนแปลงจะมีผล หากไซต์ของคุณได้รับผู้เข้าชมจำนวนมาก กรอบเวลาอาจขยายไปถึงหลายชั่วโมงด้วยซ้ำ นั่นเป็นเหตุผลที่เราแนะนำให้ตรวจสอบเว็บไซต์ของคุณอย่างน้อยสองสามครั้งในช่วง 24 ชั่วโมงที่จะมาถึง
ในกรณีที่ไซต์ของคุณไม่ได้ผลกับสิ่งที่คุณคาดหวัง ปัญหาที่เป็นไปได้มากที่สุดคือธีมหรือปลั๊กอินของคุณ หากต้องการทราบว่าอะไรทำให้เกิดปัญหาอย่างแท้จริง ให้ทำดังนี้
- เปลี่ยนเป็นธีม WordPress เริ่มต้นชั่วคราว เราจะพูดว่า "Twenty Seventeen"
- เลือกปลั๊กอินที่ติดตั้งทั้งหมดและปิดใช้งานทั้งหมด
- เปิดใช้งานธีมและปลั๊กอินทั้งหมดอีกครั้ง ทีละรายการ และตรวจสอบทุกครั้งว่าไซต์ของคุณยังทำงานอยู่หรือไม่ คุณสามารถจับผู้กระทำผิดด้วยวิธีนี้
หากเราพูดคุยกันในเชิงเทคนิค ความเข้ากันได้ของ WordPress ในเวลากลางคืนในปัจจุบันกับ PHP 8 ที่มีการกล่าวถึงอย่างมากนั้นอยู่ในระดับที่ใกล้เคียงกัน เนื่องจากเราอาศัยจาก WordPress ก่อนเวอร์ชันใหม่ของ PHP ป๊อปอัป
การทดสอบของเรานั้นสำคัญพอๆ กัน การแก้ไขนั้นก็พิถีพิถันพอๆ กัน และระดับของการแก้ไขปัญหาก็ใหญ่พอๆ กับการแก้ไขความเข้ากันได้ของ PHP ในแกนหลักของ WordPress อย่างไรก็ตาม ถ้าคุณไม่ปฏิบัติตามคู่มือนี้ คุณจะไม่สามารถเข้าใจความท้าทายด้านความเข้ากันได้และเก็บเกี่ยวผลประโยชน์สูงสุดจาก PHP 8 ได้
การเปลี่ยนแปลงครั้งใหญ่จำนวนมากและการเปลี่ยนแปลงประเภทต่าง ๆ ที่รวมอยู่ใน PHP 8 นอกเหนือจากความซับซ้อนที่เพิ่มขึ้นเล็กน้อยในเครื่องมือข้ามเวอร์ชันแล้ว ยังทำให้ความท้าทายด้านความเข้ากันได้นี้เป็นความท้าทายที่ยิ่งใหญ่กว่าที่เราเคยพบมาก่อนใน PHP เวอร์ชันก่อนหน้า รายงานนี้มีจุดมุ่งหมายเพื่ออธิบายกรณีเดียวกัน
ความท้าทายด้านความเข้ากันได้ของ WordPress และ PHP8
เราจะแสดงกลยุทธ์สองสามอย่างที่คุณสามารถปรับใช้เพื่อทำให้ codebase ที่มีอยู่เข้ากันได้กับ PHP 8
- เครื่องมือวิเคราะห์แบบคงที่ เช่น PHPCompatibility เพื่อตรวจหาปัญหาทางวากยสัมพันธ์
- การทดสอบอัตโนมัติเพื่อตรวจหาปัญหารันไทม์
- การทดสอบด้วยตนเองเพื่อตรวจหาปัญหารันไทม์
ขึ้นอยู่กับความครอบคลุมของชุดทดสอบของคุณและสัดส่วนของการเปลี่ยนแปลงทางวากยสัมพันธ์และรันไทม์ กลยุทธ์เหล่านี้ให้บริการอย่างดีสำหรับการแก้ไขความเข้ากันได้ของ codebase กับ PHP เวอร์ชันใหม่ (ปัจจุบันกำลังพูดถึง PHP 8)
แท้จริงแล้ว ในกรณีของ PHP 8 และ WordPress มีความท้าทายเพิ่มเติมบางประการที่ทำให้ยากที่จะพึ่งพากลยุทธ์เหล่านี้ เพื่อให้มั่นใจว่า WordPress เข้ากันได้อย่างสมบูรณ์แบบกับ PHP 8 ด้านล่างนี้ เราจะรายงานเกี่ยวกับกลยุทธ์ที่เราได้ปรับใช้ สำหรับ WordPress และแบ่งปันผลลัพธ์
เครื่องมือวิเคราะห์สถิต
เนื่องจากธรรมชาติของการเปลี่ยนแปลงเล็กน้อยใน PHP 8.0 ปัญหาที่สามารถตรวจพบได้โดยใช้การวิเคราะห์แบบคงที่จึงมีจำกัด ในสถานการณ์เหล่านั้น ซึ่งการวิเคราะห์แบบสถิตดูจะไปไกลกว่าศักยภาพแบบเดิมๆ และวางแผนที่จะติดตามค่าของตัวแปร ค่าคงที่ และประเภทรันไทม์ ผลลัพธ์ของการสแกนดังกล่าวมีแนวโน้มที่จะเกิดผลบวกที่ผิดพลาดอย่างแน่นอน
นอกจากนั้น ความเข้ากันได้ของ PHP เป็นเครื่องมือวิเคราะห์แบบสแตติกเพียงหนึ่งเดียวที่ใช้เพื่อค้นหาปัญหาที่เกี่ยวข้องกับความเข้ากันได้ของ PHP ข้ามเวอร์ชัน
นอกจากความเข้ากันได้ของ PHP แล้ว เครื่องมือวิเคราะห์แบบสแตติกอื่นๆ ยังรายงานเกี่ยวกับปัญหาที่ใหญ่ขึ้นอีกด้วย การรักษาผลลัพธ์เพื่อตรวจหาปัญหา ซึ่งเกี่ยวข้องกับความเข้ากันได้ของ PHP ข้ามเวอร์ชัน และ ถูกต้องจริงๆ นั้นค่อนข้างใช้เวลานานและต้องการความรู้เกี่ยวกับเครื่องมือในเชิงลึก โดยเฉพาะอย่างยิ่งเกี่ยวกับการกำหนดค่าให้มีเสียงรบกวนน้อยที่สุด
ในขณะเดียวกัน เครื่องมือเหล่านี้ก็มีความไม่เสถียรอย่างต่อเนื่อง โดยพยายามดำเนินการตามการเปลี่ยนแปลงในเวอร์ชัน PHP และอัปเดตการสแกนที่เป็นไปได้ ดังนั้น เราคาดว่าเครื่องมือเหล่านี้จะตรวจพบปัญหาอื่นๆ อีกในอนาคตอันใกล้
โดยไม่คำนึงถึงสิ่งที่เคยเป็นมาและสามารถค้นพบเพิ่มเติมได้ในขณะนี้ มีโอกาสที่เครื่องมือเหล่านี้จะยังพบปัญหาเพิ่มเติมในอนาคต (อันใกล้)
การสแกน WordPress ด้วย PHPCompatibility
“__destruct() จะไม่ถูกเรียกหลังจาก die() ใน __construct() อีกต่อไป” เป็นอีกปัญหา PHP 8 ที่ PHPCompatibility พบ เครื่องสแกนตรวจพบสิ่งนี้อย่างสมบูรณ์ อย่างไรก็ตาม จากการวิเคราะห์เพิ่มเติม พบว่าในกรณีนี้จะไม่เกิดปัญหา
นอกจากนั้น PHPCompatibility ตรวจพบปัญหาในโค้ดที่ใช้โดย "ตัวแก้ไขปลั๊กอิน/ธีม" การวิเคราะห์ของรหัสที่เกี่ยวข้องได้ระบุถึงการมีอยู่ของการกำกับดูแลที่สำคัญในรหัส ในตัวแก้ไข WordPress ตั้งตารอที่จะทำการวิเคราะห์โค้ดขั้นต่ำ อย่างไรก็ตาม จะไม่นำโค้ด PHP 5.3+ มาพิจารณา
ในขณะที่คำนึงถึงการเปลี่ยนแปลงที่เกี่ยวข้องใน PHP8 การกำกับดูแลนี้ได้กลายเป็นเรื่องที่ซับซ้อนมากขึ้นในการแก้ไข เรารันการสแกนด้วย PHPความเข้ากันได้กับเวอร์ชันที่พัฒนาแล้ว และผลลัพธ์ตามที่เราคาดไว้นั้นแตกต่างอย่างมากจากสิ่งที่เราได้รับจากการอัปเดต PHP ก่อนหน้านี้ ปัญหาที่เครื่องสแกนตรวจพบจะถูกดูแลจากภายนอก
การสแกน WordPress ด้วย Exakat
พูดคุยเกี่ยวกับการสแกนสาธารณะล่าสุดที่เกิดขึ้นเมื่อวันที่ 16 ตุลาคมโดยอิงจาก WP trunk Exakat รายงานปัญหาทั้งหมด 149.567 ฉบับ
รายงานความเข้ากันได้ของ PHP 8 แสดงให้เราเห็นปัญหาทั้งหมด 93 รายการ อย่างไรก็ตาม ยังไม่สมบูรณ์เนื่องจากหมายเลขการวิเคราะห์ที่เกี่ยวข้องกับ PHP 8 ไม่รวมอยู่ในรายงาน
แม้ว่าเราคาดว่ารายงานเหล่านี้จะมีผลบวกปลอมจำนวนมาก เนื่องจาก WordPress ไม่ได้ใช้การประกาศประเภท ดังนั้นประเภทจะถูกอนุมานจากโค้ดที่พบและประเภทที่แสดงใน docblock ปัญหาเหล่านี้ควรได้รับการตรวจสอบเป็นรายบุคคล
ไม่ว่าเพียง 1% ของปัญหาที่พบนั้นถูกต้อง แต่ยังคงลดลงเหลือประมาณ 450 ข้อผิดพลาด ซึ่งยังต้องได้รับการจัดการ นอกจากนั้น เวลาจำนวนมากที่ต้องใช้เพื่อขจัดปัญหาที่แท้จริงออกจากผลบวกที่ผิดพลาด
การสแกน WordPress ด้วย PHPStan
การ สแกนด้วย PHPStan นั้น ต้องการชุดกฎที่ปรับแต่งอย่างเต็มที่เพื่อให้ได้ผลลัพธ์ที่ใช้งานได้จากระยะไกล แต่ถึงกระนั้นก็ยังพิสูจน์ได้ว่ามีข้อผิดพลาดบางประการที่ทำให้เอาต์พุตไม่สามารถใช้งานได้
หมายเหตุ: เราไม่ได้วิพากษ์วิจารณ์เครื่องมือ PHPStan แต่เป็นเพราะว่า WordPress แทบจะไม่ใช้การประกาศประเภท ในขณะที่ PHPStan มีแนวโน้มหลักในโครงการที่ใช้โค้ดที่ทันสมัย ใช่ไหม
การสแกนครั้งแรกที่ประกอบด้วยการกำหนดค่าพื้นฐานที่สุดจะทำให้เกิดปัญหามากกว่า 20,000 รายการ การสแกนด้วยชุดกฎที่กล่าวถึงข้างต้นที่ปรับแต่งได้สูง โดยมีเป้าหมายที่ปัญหาที่เกี่ยวข้องกับ PHP 8 โดยเฉพาะ ยังคงให้ผลลัพธ์ 580 ปัญหาที่ระดับ 5 และปัญหาที่อาจเกิดขึ้นเพิ่มเติม 2.150 ที่ระดับ 7 สิ่งเหล่านี้อาจมีผลบวกที่ผิดพลาดเล็กน้อย แต่ยังให้ผลอีก 380 รายการ ที่ระดับ 8 โดยมีข้อแม้ที่คล้ายกัน
ตั๋ว Trac เพิ่งเปิดขึ้นเพื่อจัดการกับรายการปัญหาโดยพิจารณาจากการกำหนดค่าที่ไม่รู้จัก แต่มีการกำหนดเป้าหมายอย่างสมบูรณ์ yo ผ่านประเภทพารามิเตอร์ที่ไม่ตรงกัน (ระดับ 5) ร่าง PR พร้อมที่จะแก้ไขปัญหาเหล่านี้
การประเมินโดยสังเขปของ PR นี้บ่งชี้ว่าการแก้ไขส่วนใหญ่ที่เสนอจะเป็นตัวแปร typecast เป็นประเภทที่คาดหวังและ ซ่อน ปัญหา ไม่ได้แก้ไขโดยการตรวจสอบอย่างถูกต้อง สิ่งนี้นำไปสู่การทำงานที่ไม่คาดคิดในแอปพลิเคชันในกรณีที่การเปลี่ยนแปลงเหล่านี้ไม่ได้มาพร้อมกับการทดสอบหน่วยที่เข้มงวด นอกจากนั้น Tit อาจส่งผลให้เกิดปัญหาเพิ่มขึ้นในขณะที่แก้ไขข้อผิดพลาดต่อไปอย่างแน่นอน
ในปัจจุบัน ยังไม่ได้รับการยืนยันว่าการแก้ไขที่เสนอนั้นรับประกันหรือว่าปัญหาที่ระบุควรถูกมองว่าเป็นผลบวกที่ผิดพลาด
การทดสอบ
การวิเคราะห์แบบสถิตสามารถไปได้ไกลเนื่องจากลักษณะของการสลับที่มีปัญหาใน PHP8 ซอฟต์แวร์ตรวจสอบและทดสอบด้วยตนเองพิสูจน์แล้วว่าเป็นงานที่ต้องใช้ความพยายามอย่างมาก และมนุษย์ก็มักจะมองข้ามสิ่งต่าง ๆ เมื่อมีอะไรให้ค้นหามากมาย
เมื่อพูดถึงการทดสอบที่ดำเนินการโดย ผู้ใช้ปลายทาง พวกเขาพิสูจน์แล้วว่าค่อนข้างไร้ประโยชน์ เนื่องจากโดยปกติแล้วจะส่งผลให้มีการทดสอบ "เส้นทางแห่งความสุข" หากเราต้องการได้ผลลัพธ์ที่น่าเชื่อถือมากขึ้น เราก็จำเป็นต้องมีการทดสอบเชิงสำรวจและการถดถอยอย่างครอบคลุม
การมีการทดสอบอัตโนมัติคุณภาพสูงและใช้งานสิ่งเหล่านี้บน PHP 8 มีความสำคัญมากกว่าสิ่งใด สิ่งนี้จะนำเสนอข้อบ่งชี้ที่สมบูรณ์แบบของปัญหา PHP 8.0 ที่คาดหวัง
ผู้ที่ชื่นชอบเทคโนโลยีส่วนใหญ่ตื่นเต้นกับ PHP 8.0 และแน่นอนว่าการเปลี่ยนแปลงครั้งนี้ยิ่งใหญ่มาก ทุกคนจะใช้เวลาพอสมควรเพื่อทำความเข้าใจความเข้ากันได้ การกำหนดค่า ประโยชน์ ฯลฯ ของ PHP 8 และหนึ่งในคำถามที่ใหญ่ที่สุดที่ผุดขึ้นมาคือ – “ WordPress เข้ากันได้กับ PHP 8 อยู่แล้ว และถ้าไม่ จะต้องดำเนินการอย่างไร ต้องการ."
ทันทีที่ PHP 8 เปิดตัว เวลาของผู้เชี่ยวชาญของเราก็เข้าสู่ระดับการทดสอบที่ลึกที่สุด และผลลัพธ์ก็อาจทำให้ทุกคนตกใจได้! ใช่ ตอนนี้เรารู้ทุกอย่างแล้ว และรู้สึกยินดีที่ได้อวดรายงานและผลการทดสอบของเรา
ไปที่การ รันการทดสอบอัตโนมัติบน PHP 8 กันตอนนี้
เรียกใช้การทดสอบอัตโนมัติบน PHP 8
PHPUnit 9.3 เป็น PHPUnit เวอร์ชันแรกที่เข้ากันได้อย่างเป็นทางการกับ PHP 8.0 และเปิดตัวในเดือนสิงหาคม 2020 การรันชุดทดสอบอัตโนมัติที่ทำงานบน PHP นั้นยากเพราะเครื่องมือจริงสำหรับการทดสอบหน่วย
การรับชุดทดสอบอัตโนมัติเพื่อรันบน PHP 8 จะนำเราไปสู่รูกระต่ายต่อไปในฐานะเครื่องมือที่แท้จริงสำหรับการทดสอบหน่วยในโลกของ PHP; โดยปกติ PHPUnit จะมีการเปิดตัวครั้งใหญ่ทุกปี โดยทุก ๆ เวอร์ชันรองรับการดรอปครั้งใหญ่สำหรับ PHP เวอร์ชันก่อนหน้า มันเปิดตัวการเปลี่ยนแปลงที่แตกหัก แต่เนื่องจาก PHPUnit 9.3 เข้ากันได้อย่างเป็นทางการกับ PHP 8.0 ดังที่เราได้กล่าวไว้ข้างต้น ไม่จำเป็นต้องกังวล!
เรารู้ว่าอย่างน้อย WordPress ยังคงรองรับ PHP 5.6 สำหรับการทดสอบรันบน PHP 8.0 ชุดทดสอบใดๆ ที่เกี่ยวข้องกับ WordPress จะต้องเข้ากันได้อย่างสมบูรณ์กับ PHPUnit 5 จนถึง PHPUnit 9 แน่นอนว่าเครื่องมือถูกสร้างขึ้นเพื่อช่วยคุณในเรื่องนี้ ยังคงต้องใช้ความพยายามและเวลาในการใช้เครื่องมือเหล่านี้เพื่อให้ชุดทดสอบเข้ากันได้
รับการทดสอบที่ทำงานบน PHP8 สำหรับ WordPress Core
การทดสอบ WP Core กำลังผ่านและทำงานกับ PHP 8 การทดสอบเหล่านี้กำลังดำเนินการในเวอร์ชันที่ติดตั้งผู้แต่งของ PHPUnit 7.5 แม้ว่า PHPUnit 9.3 จะเป็นเวอร์ชัน PHPUnit ที่เก่าที่สุดที่เข้ากันได้กับ PHP 8 อย่างเป็นทางการ
ปัญหาสุดท้ายนี้ได้รับการแก้ไขแล้วโดยการคัดลอกจำนวนไฟล์/คลาสที่เลือกจาก PHPUnit 9.3 ไปยังชุดทดสอบ WordPress ยกเว้นคลาสดั้งเดิมของ PHPUnit จากการสร้างโหลดอัตโนมัติของ Composer ซึ่งรองรับการใช้สำเนาจาก PHPUnit 9.3 ในชุดทดสอบ WordPress อย่างไรก็ตาม วิธีนี้ใช้ได้ผลในตอนนี้ เราจะเรียกมันว่าวิธีแก้ปัญหาแบบแฮ็ก และมันอาจจะไม่ยั่งยืนในอนาคตอันใกล้ นอกจากการบำรุงรักษาที่จำเป็นในปัจจุบัน
สำหรับคุณภาพของการทดสอบ ค่านี้ถือว่าต่ำมาก โดยส่วนใหญ่จะใช้การตรวจสอบแบบหลวมๆ ในกรณีส่วนใหญ่
เจาะลึกมากขึ้น ตั๋ว Trac เพื่อแก้ไขปัญหานี้ถูกเปิดขึ้นในปี 2016 เมื่อพิจารณาถึงการปฏิบัติตามประเภทที่เข้มงวดมากขึ้นใน PHP ตั๋วนี้ได้รับการคืนค่าแล้ว มีการทำงานมากเพื่อลดนี้
ในขณะที่เราเขียน มีประมาณ 800 อินสแตนซ์ (676 assertEquals() ที่เพิ่มไปยัง 96 assertNotEquals()) ยังคงใช้การตรวจสอบประเภทที่หลวม – ลดลงจาก 8000+ อินสแตนซ์
ส่วนหนึ่ง การยืนยันแบบหลวม ๆ ที่เหลืออยู่นั้นถูกต้องตามกฎหมายเมื่อเปรียบเทียบวัตถุ ส่วนหนึ่งต้องได้รับการแก้ไขอย่างแน่นอน อย่างไรก็ตาม ปัจจุบันจะนำไปสู่ความล้มเหลวในการทดสอบ สิ่งสุดท้ายเหล่านี้เน้นย้ำถึงข้อบกพร่องทั้งในการทดสอบ อย่างไรก็ตาม บางครั้งในโค้ดที่กำลังทดสอบ
การทดสอบธีมและปลั๊กอิน
มีปลั๊กอินเพียงไม่กี่เปอร์เซ็นต์เท่านั้น ปลั๊กอินที่พัฒนาอย่างมืออาชีพและเป็นที่นิยมมากกว่า และมีการทดสอบอัตโนมัติ โดยทั่วไปแล้วสิ่งนี้น่าเป็นห่วงเนื่องจากไซต์ WordPress ปกติมีปลั๊กอินเกือบ 19 หรือ 20 ตัวอย่างแน่นอน มีเว็บไซต์ไม่กี่แห่งที่มีปลั๊กอินเพิ่มมากขึ้น! การมีการทดสอบอัตโนมัติสำหรับธีมนั้นยากยิ่งกว่า
เป็นการท้าทายที่จะอนุญาตให้ชุดทดสอบเหล่านี้ทำงานบน PHP เวอร์ชัน 8 และก่อนที่จะได้รับข้อมูลเชิงลึกเกี่ยวกับความเข้ากันได้ของปลั๊กอินและธีมกับ PHP 8
อย่างไรก็ตาม ปลั๊กอิน/ธีมซึ่ง ส่วน ใหญ่เป็นปลั๊กอินที่สามารถคาดหวังปัญหา PHP 8.0 ขั้นต่ำได้ เราอุทานเช่นนั้นเพราะธีม/ปลั๊กอินดังกล่าวใช้รูปแบบการพัฒนาอย่างมืออาชีพ
สาเหตุที่ใหญ่กว่าของความกังวลคือการทดสอบและธีมจำนวนมาก ที่ ไม่มี การทดสอบ เนื่องจากสิ่งเหล่านี้มีแนวโน้มที่จะมีปัญหามากกว่าขณะใช้งาน PHP 8
สำหรับธีมและปลั๊กอินซึ่ง มีการทดสอบ การทดสอบหลักๆ จะ มีอยู่ 2 ประเภท ซึ่งอาจมีหรือไม่มีก็ได้:
- การ ทดสอบหน่วย การทดสอบแบบสแตนด์อโลนซึ่ง "เย้ยหยัน" WP เพื่ออนุญาตการทดสอบโค้ดปลั๊กอิน ใช้ เฟรมเวิร์ก ยอดนิยมเช่น BrainMonkey และ Mockery
- การทดสอบบูรณา การ ตอนนี้ การทดสอบการรวม เป็นที่ที่ WordPress โหลดเองก่อนที่เราจะเรียกใช้ชุดทดสอบ และจะใช้โค้ด WPcore และรวมเข้ากับชุดทดสอบ WP
การทดสอบบูรณาการ
เรารู้ว่า WordPress ได้ตัดสินใจที่จะยึดติดกับ PHPUnit 7.5 นั่นหมายความว่าอย่างไร?
สำหรับการทดสอบการรวมสำหรับธีมและปลั๊กอิน สิ่งเหล่านี้จะถูกข้ามไปที่ PHPUnit 7.5 (สูงสุด)
ธีมและปลั๊กอินจะต้องคัดลอกการแฮ็กใน WP core เพื่อให้การทดสอบการรวมทำงานได้อย่างสมบูรณ์ หรืออีกทางหนึ่ง พวกเขาจะต้อง ใช้ ไฟล์ใน WP Core อย่างไรก็ตาม พวกเขาจะต้องสร้างตัวโหลดอัตโนมัติแบบกำหนดเอง เนื่องจากไม่สามารถใช้แฮ็คการสร้างการโหลดอัตโนมัติของ Composer เดียวกันได้
หากไฟล์เนทีฟของ PHPUnit จำเป็นต้องป้องกันไม่ให้โหลดอยู่แล้ว ตัวโหลดอัตโนมัติที่กำหนดเองดังกล่าวจะต้องบูต สแตรป ก่อน ไฟล์โหลดอัตโนมัติของ Composer
การทดสอบหน่วย
สำหรับการทดสอบหน่วยโดยใช้ Mockery หรือ BrainMonkey จำเป็นต้องใช้ PHPUnit > 8 เนื่องจากเฟรมเวิร์กการเยาะเย้ยที่มีให้สำหรับ PHPUnit 7.x ไม่รองรับ PHP 8.0 ดังนั้น การเปรียบเทียบระหว่างชุดทดสอบเหล่านี้จึงเป็นสิ่งจำเป็นกับ PHPUnit 5 ถึง 9 ซึ่งเพิ่มความท้าทายอีกอย่างแน่นอน
ยังไง?
ต้องใช้ PHPUnit เวอร์ชันต่างๆ เพื่อเรียกใช้ชุดทดสอบแต่ละชุดเมื่อใช้ชุดทดสอบทั้งสองประเภท เพื่อทำให้สถานการณ์นี้แย่ลง ปกติแล้วปลั๊กอินจะมีไฟล์ composer.lock ที่คอมมิตไว้ เพื่อให้แน่ใจว่าการพึ่งพารันไทม์จะอยู่ที่เวอร์ชันที่กำหนดและเข้ากันได้กับ PHP 5.6 อย่างสมบูรณ์
ในบางช่วงเวลา ส่วนสุดท้ายนี้บังคับใช้โดยมีการกำหนดค่าแพลตฟอร์ม php 5.6 ในไฟล์ composer.json นั่นหมายถึงการพึ่งพาผู้พัฒนา BrainMonkey, Mockery, PHPUnit จะ ถูก ล็อคในเวอร์ชันที่เข้ากันได้กับ PHP 5.6 ตอนนี้จะป้องกันไม่ให้ทำการทดสอบบน PHP 8.0 อย่างแน่นอน
คุณสามารถเอาชนะมันได้โดยการนำแพลตฟอร์มออกทันที นอกเหนือจากการอัพเดตไฟล์ composer.lock และ composer.json อย่างไรก็ตาม สิ่งนี้ทำให้การรันการทดสอบบน PHP 8.0 เกี่ยวข้องมากขึ้น ทั้งใน CI และในเครื่อง สำหรับนักพัฒนา
ความเข้ากันได้ของ PHP 8 ดูค่อนข้างยุ่งยากในไซต์ WordPress ขนาดใหญ่
เพียงแค่ตรวจสอบการเปลี่ยนแปลงต่อเนื่องใน PHP 8 เราสามารถยืนยันได้ว่าสิ่งนี้มีแนวโน้มที่จะทำให้เกิดการแตกหักครั้งใหญ่ในไซต์โดยไม่มีเหตุผลที่ชัดเจนสำหรับการแตกหักนั้น ในบางครั้ง ข้อผิดพลาดจะเกิดขึ้นในที่เดียว แต่สร้างโดยธีมหรือปลั๊กอินในที่อื่น ซึ่งแน่นอนว่าจะทำให้ปัญหาเหล่านี้แก้ไขจุดบกพร่องได้ยาก
accuwebhosting.com เป็นไซต์ WordPress ที่ได้รับการดูแลอย่างแข็งขันอย่างแน่นอน และทีมงานนักพัฒนามืออาชีพที่ทุ่มเทให้การสนับสนุน ไซต์ WordPress ส่วนใหญ่ไม่มีความหรูหราดังกล่าว และการบรรเทาปัญหาความเข้ากันได้บนไซต์เหล่านี้จะเป็นสิ่งที่ท้าทายอย่างแน่นอน
นักพัฒนาซอฟต์แวร์ต้องอัปเดตนานเท่าใด
วงจรชีวิตของ PHP แต่ละเวอร์ชันคือ 2 ปี และบั๊กต่างๆ ได้รับการแก้ไขแล้วในยุคนี้ เพิ่มอีกหนึ่งปีในระหว่างที่ปัญหาด้านความปลอดภัยได้รับการแก้ไข PHP 7.4 มาถึงในเดือนพฤศจิกายน 2019 เป็นเวอร์ชันสุดท้ายของ PHP 7 ซึ่งหมายความว่าบั๊กใน PHP 7.4 จะได้รับการแก้ไขจนถึงเดือนพฤศจิกายน 2021 ปัญหาด้านความปลอดภัยจะได้รับการแก้ไขจนถึงเดือนพฤศจิกายน 2022 และจะถึงจุดสิ้นสุดของชีวิต ในช่วงเวลานั้น
ดังนั้น วันที่ตัดยอดแบบตายตัวคือเดือนพฤศจิกายน 2022: โค้ด PHP ทั้งหมดจะต้องเข้ากันได้กับ PHP 8 ในตอนนี้ มิฉะนั้นอาจเกิดอันตรายจากการติดอยู่กับเวอร์ชัน PHP ที่อาจมีช่องโหว่
บทสรุป
PHP 8 จะมีการเปลี่ยนแปลงที่สำคัญมากมาย เราได้อธิบายการเปลี่ยนแปลงที่ดีมากมายในรายงานของเรา ซึ่งผู้เชี่ยวชาญของเราจะถือว่ามีผลกระทบที่ร้ายแรงต่อ WordPress นอกเหนือจากระบบนิเวศของ WordPress ในวงกว้าง โดยทั่วไปจะต้องจัดการกับคำเตือนที่กลายเป็นปัญหา และมีข้อผิดพลาดหลายอย่างเกิดขึ้น ซึ่งยากต่อการจัดการ คุณสามารถตรวจพบเปอร์เซ็นต์ที่สูงกว่าของการเปลี่ยนแปลงเหล่านี้บนรันไทม์ได้
การแก้ไขปัญหาความเข้ากันได้ทั้งหมดนี้เป็นงานใหญ่ ในการบรรลุเป้าหมายนั้น คุณต้องใช้กลยุทธ์ที่หลากหลาย เริ่มตั้งแต่การวิเคราะห์แบบสถิตไปจนถึงการทดสอบอัตโนมัติ ต้องใช้เวลา+ความพยายามอย่างมาก
คุณควรมีสิทธิที่จะใช้เครื่องมือในการดำเนินการทุกอย่างได้อย่างสมบูรณ์แบบ สำหรับโปรเจ็กต์เช่น WordPress ซึ่งต้องรองรับ PHP เวอร์ชันต่างๆ ได้มีการแนะนำความซับซ้อนเพิ่มเติมหลายอย่างในการควบคุมเครื่องมือวิเคราะห์เวอร์ชันต่างๆ ตามที่เราได้กล่าวไว้ข้างต้น
แน่นอนว่ามันค่อนข้างจะยากเนื่องจากรันไทม์และความแตกต่างทางวากยสัมพันธ์ระหว่าง PHP 5 และ 8 นั้นใหญ่มากอย่างไม่น่าเชื่อ
การใช้ PHP 8 บน WordPress ดีหรือไม่? จริงๆแล้วไม่ใช่ข้อโต้แย้งที่นี่ ข้อสรุปเดียวที่นี่คือ – เป็นเรื่องยากมากที่จะทำเช่นนั้น
นอกจากนี้ เราได้พิจารณาปัญหาความครอบคลุมและการพึ่งพา PHP ของ WordPress หากคุณต้องการตรวจหาความเข้ากันได้อย่างน่าเชื่อถือ การครอบคลุมการทดสอบในระดับสูงเป็นสิ่งจำเป็น และการพูดถึง PHP 8 นั้นสำคัญกว่าเพราะปัญหาความเข้ากันได้มีจำนวนมากกว่าปกติ เปอร์เซ็นต์ที่สำคัญของพวกเขาสามารถตรวจพบได้เมื่อรันไทม์เท่านั้น
แล้วเราจะแนะนำอย่างไร?
หากตรวจพบปัญหา จำเป็นต้องมีการดีบักอย่างกว้างขวางเพื่อค้นหาต้นตอของปัญหา ไม่ว่าจะเป็น WordPress, ธีม, ปลั๊กอิน หรือเกี่ยวข้องโดยตรงกับความเข้ากันได้ของ PHP
ความครอบคลุมการทดสอบแทบไม่มีสำหรับการพึ่งพาและต่ำ ดังนั้นจึงเป็นเรื่องยากที่จะอุทานว่าอะไรคือความเข้ากันได้ของคอร์ WordPress กับ PHP 8 ตามความหมายที่แท้จริง
เนื่องจาก PHP 8 มุ่งเน้นที่การพิมพ์ที่เข้มงวดอย่างมาก ระบบการขยายประเภทที่ไม่ปลอดภัยของ WP จึงมีความเสี่ยงเป็นพิเศษต่อปัญหา ซึ่งอาจนำไปสู่ปลั๊กอินที่สร้างข้อผิดพลาดประเภทในปลั๊กอินอื่น ๆ หรือตัว WP เอง
เรานำสิ่งนี้ไปทดสอบโดยทำการวิเคราะห์ข้อมูลข้อผิดพลาดเมื่อเดือนที่แล้ว ในฐานะที่เป็นไซต์ขนาดใหญ่ เราคิดว่าอาจบ่งบอกถึงปัญหาที่เราคาดหวังได้อย่างชัดเจน แน่นอน เราพบคำเตือนหลายอย่างที่จะกลายเป็นข้อผิดพลาดใน PHP 8
เราต้องการจดบันทึกสุดท้ายที่นี่ WordPress ไม่ใช่ codebase ดั้งเดิมเพียงตัวเดียวที่มีอยู่ นอกจากนี้ยังไม่ใช่โครงการเดียวที่มีเป้าหมายเพื่อรองรับ PHP เวอร์ชันต่างๆ มากมาย ข้อมูลในบทความนี้อาจนำไปใช้ได้ดีกับโครงการอื่นๆ ด้วย
เป้าหมายหลักของบทความนี้จาก Accuweb คือการแจ้งและให้ภาพรวมของความท้าทายและปัญหาที่เกี่ยวข้องกับความเข้ากันได้ของ PHP 8 ใน WP เราหวังเป็นอย่างยิ่งว่าจะตอบสนองวัตถุประสงค์นี้ได้อย่างสมบูรณ์แบบ