แนะนำตัว
มีพฤติกรรมแปลกประหลาดของ ในที่สุด 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