แนะนำตัว
มีพฤติกรรมแปลกประหลาดของ ในที่สุด block เมื่อลอง block หรือ catch block (หรือทั้งสองอย่าง) มี return คำแถลง. ปกติคำสั่ง return จะทำให้การควบคุมโปรแกรมกลับสู่ตำแหน่งที่เรียก อย่างไรก็ตาม ในกรณีของฟังก์ชันที่มีบล็อก try /catch พร้อม return คำสั่งในบล็อกสุดท้ายจะถูกดำเนินการก่อนที่จะส่งคืน
ตัวอย่าง
ในตัวอย่างต่อไปนี้ ฟังก์ชัน div() มี try - catch - ในที่สุดก็สร้าง บล็อกการลองโดยไม่มีข้อยกเว้นส่งคืนผลลัพธ์ของการแบ่ง ในกรณีที่มีข้อยกเว้น catch block จะส่งกลับข้อความแสดงข้อผิดพลาด อย่างไรก็ตาม ไม่ว่าในกรณีใด คำสั่งในบล็อกสุดท้ายจะถูกดำเนินการก่อน
ตัวอย่าง
<?php function div($x, $y){ try { if ($y==0) throw new Exception("Division by 0"); else $res=$x/$y;; return $res; } catch (Exception $e){ return $e->getMessage(); } finally{ echo "This block is always executed\n"; } } $x=10; $y=0; echo div($x,$y); ?>
ผลลัพธ์
ผลลัพธ์ต่อไปนี้จะปรากฏขึ้น
This block is always executed Division by 0
เปลี่ยนค่าของ $y เป็น 5 ผลลัพธ์ต่อไปนี้จะแสดงขึ้น
This block is always executed 2