Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

ข้อยกเว้นและข้อผิดพลาดใน PHP 7


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

ข้อยกเว้น: เมื่อใดก็ตามที่เกิดข้อผิดพลาดร้ายแรงและสามารถกู้คืนได้ PHP 7 จะส่งข้อยกเว้นแทนที่จะหยุดการทำงานของแอปพลิเคชันหรือสคริปต์ทั้งหมด

ข้อผิดพลาด: PHP 7 throwsTypeError, ArithmeticError, ParserError และ AssertionError แต่คำเตือนและข้อผิดพลาดในการแจ้งให้ทราบยังคงไม่เปลี่ยนแปลง การใช้บล็อก try/catch สามารถตรวจจับอินสแตนซ์ข้อผิดพลาดได้ และตอนนี้ FatalErrors สามารถโยนอินสแตนซ์ข้อผิดพลาดได้ ใน PHP 7 อินเทอร์เฟซแบบโยนได้จะถูกเพิ่มเพื่อรวมสาขาข้อยกเว้นสองสาขา ข้อยกเว้นและข้อผิดพลาด เพื่อใช้งานการโยนได้

ตัวอย่าง

สวัสดี(); $a =null; $a->สวัสดี(); } จับ (ข้อผิดพลาด $e) { echo "เกิดข้อผิดพลาด" PHP_EOL; echo $e->getMessage() . PHP_EOL; echo "ไฟล์:" . $e->getFile() . PHP_EOL; echo "Line:" . $e->getLine(). PHP_EOL; } echo "ดำเนินการโค้ด PHP ต่อ\n";?>

ผลลัพธ์

ในโปรแกรมข้างต้น เราจะได้รับข้อผิดพลาดดังต่อไปนี้ −

คลาส XYZError เกิดขึ้นCall to a member function Hello() on nullFile:/home/cg/root/9008538/main.phpLine:11Continue with the PHP code

หมายเหตุ: ในตัวอย่างข้างต้น เราเรียกเมธอดบนออบเจกต์ว่าง ตัวจับถูกใช้เพื่อจัดการกับข้อยกเว้นแล้วดำเนินการโค้ด PHP ต่อ

ข้อผิดพลาดทางคณิตศาสตร์

เราจะใช้ DivisionByZeroError ของข้อผิดพลาดทางคณิตศาสตร์ แต่ถึงกระนั้นเราจะได้รับข้อผิดพลาดในการเตือนผู้ดำเนินการแผนก

ตัวอย่าง:ข้อผิดพลาดทางคณิตศาสตร์

<ก่อน>getMessage() . PHP_EOL; echo "ไฟล์:" . $e->getFile() . PHP_EOL; echo "Line:" . $e->getLine(). PHP_EOL; } echo "$z \n"; echo " ดำเนินการต่อด้วยโค้ด PHP\n";?>

ผลลัพธ์

เอาต์พุตสำหรับโปรแกรมข้างต้นจะดำเนินการโดยมีข้อผิดพลาดในการเตือน -

หารด้วย zeroFile:/home/cg/root/9008538/main.phpLine:5ดำเนินการด้วยโค้ด PHP

หมายเหตุ: ในโปรแกรมด้านบนนี้ เราจะดักจับและรายงานฟังก์ชันDivisionByZeroErrorภายในtheintdiv()