ในภาษา PHP จะมีข้อผิดพลาดหรือ error ระดับต่างๆหลายระดับ ซึ่งทั้งหมดจะมีบอกและอธิบายไว้ในค่าคงที่ของ PHP ที่กำหนดไว้ล่วงหน้าแล้ว.
ใน Predefined constants ที่กำหนด error ระดับต่างๆของ PHP นั้น แม้จะมีมากมายเกินกว่า 10 รายการ แต่ว่าผลที่จะแสดงออกมาเมื่อโค้ดของเรามีข้อผิดพลาดนั้น จากที่พบมามี 4 ระดับเท่านั้น ดังจะอธิบายในตารางต่อไปนี้
ระดับ | รายละเอียด |
---|---|
Notice | ระดับ Notice นั้นเป็นการแจ้งให้รู้. โค้ดจะยังทำงานต่อไปได้ แต่จำเป็นจะต้องแก้ไข. |
Warning | ระดับ Warning นั้นเป็นการแจ้งเตือน. โค้ดก็จะยังทำงานต่อไปได้เช่นกัน แต่จำเป็นจะต้องแก้ไขโดยด่วน. |
Fatal | ระดับ Fatal นั้นเป็นข้อผิดพลาดที่ถือว่าร้ายแรง. โค้ดจะไม่สามารถทำงานต่อไปได้เลย และจะต้องแก้ไขทันที. |
Parse | ข้อผิดพลาดนี้สร้างจากตัว PHP parser โดยมักมีที่มาจากการเขียนโค้ดผิด. โค้ดจะไม่สามารถทำงานต่อไปได้เลย และจะต้องแก้ไขทันที. |
ตัวอย่างโค้ดที่ทำให้เกิดข้อผิดพลาดระดับต่างๆ
ก่อนที่จะทำการทดลองกับโค้ดต่อไปนี้ ขอแนะนำให้ปรับ php.ini ให้เหมาะสมสำหรับการเขียนโปรแกรมเสียก่อน.
ต่อไปนี้จะขอยกตัวอย่างโค้ดต่างๆที่มักจะผิดพลาดกันบ่อยๆ และทำให้เกิดข้อผิดพลาดระดับต่างๆ. โค้ดบางตัวจะมีผลกับรุ่น PHP ต่างๆกัน โปรดอ่านโดยละเอียด.
ข้อผิดพลาดระดับ Notice.
echo $undefinedVar;
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Notice: Undefined variable: undefinedVar ใน PHP รุ่นที่เก่ากว่า 8.0 เนื่องจากตัวแปร $undefinedVar
ไม่ได้ถูกกำหนดไว้.
สำหรับ PHP 8.0 หรือใหม่กว่า ข้อผิดพลาดนี้จะถูกยกระดับขึ้นไปที่ Warning.
echo $_GET['name'];
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Notice: Undefined index: name ใน PHP รุ่นที่เก่ากว่า 8.0 เนื่องจากในหน้าเว็บปกติที่ไม่มี URL parameter ?name=xxx ส่งไปด้วย จะไม่สามารถเรียกหาค่า index ที่ชื่อ name
ในตัวแปร $_GET
ได้เลย.
สำหรับ PHP 8.0 หรือใหม่กว่า ข้อผิดพลาดนี้จะถูกยกระดับขึ้นไปที่ Warning.
ข้อผิดพลาดระดับ Warning.
$array = '';
echo array_keys($array);
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Warning: array_keys() expects parameter 1 to be array, string given ใน PHP รุ่นที่เก่ากว่า 8.0 เนื่องจาก argument แรกของฟังก์ชั่น array_keys()
ต้องมีค่าเป็น array แต่ในโค้ดกำหนดค่าที่เป็น string ไปให้.
สำหรับ PHP 8.0 หรือใหม่กว่า ข้อผิดพลาดสำหรับฟังก์ชั่นนี้จะถูกยกระดับขึ้นไปที่ Fatal.
include 'not-exists.php';
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Warning: include(not-exists.php): Failed to open stream: No such file or directory ใน PHP ทุกรุ่น เนื่องจากไฟล์ที่จะ include นั้นไม่มีอยู่จริง.
ข้อผิดพลาดระดับ Fatal.
echo notExistsFunction();
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Fatal error: Uncaught Error: Call to undefined function notExistsFunction() ใน PHP ทุกรุ่น เนื่องจากฟังก์ชั่นที่เรียกใช้นั้นไม่มีอยู่จริง.
ข้อผิดพลาด Parse.
echo 'blue'
โค้ดด้านบนนี้จะทำให้เกิดข้อผิดพลาด Parse error: syntax error, unexpected end of file, expecting "," or ";" ใน PHP ทุกรุ่น เนื่องจากเขียนโค้ดผิด ตกเครื่องหมาย semi colon (;) ที่ท้ายบรรทัด.
สรุป
ความแตกต่างของข้อผิดพลาดแต่ละระดับจะช่วยให้คุณตรวจสอบและแก้ไขโค้ดได้อย่างทันท่วงที เพื่อความปลอดภัย, ความรวดเร็วและประสิทธิภาพของโปรแกรมที่เขียนขึ้นมา. และขอแนะนำว่าเมื่อพบข้อผิดพลาดระดับ Warning ให้ทำการแก้ไขโดยด่วน อย่าปล่อยทิ้งไว้ เพราะจากประสบการณ์แล้ว PHP มันจะยกระดับข้อผิดพลาดนี้ในรุ่นต่อไปให้กลายเป็น Fatal ซึ่งก็คือร้ายแรงและโค้ดจะหยุดทำงาน. ข้อผิดพลาดเหล่านี้จะมีประโยชน์มากหากคุณใส่ใจกับมันและไม่ปกปิดมันเอาไว้ เพราะมันจะแจ้งเตือนคุณพร้อมรายละเอียด ช่วยเหลือให้คุณแก้ไขโค้ดได้อย่างถูกต้องในเบื้องต้น.