Câu hỏi này là về cách cách tốt nhất để thực thi mã bên ngoài khối try nếu không có ngoại lệ nào được ném.Cách sạch nhất để thực thi mã bên ngoài khối thử chỉ khi không có ngoại lệ được ném
try {
//experiment
//can't put code after experiment because I don't want a possible exception from this code to be caught by the following catch. It needs to bubble.
} catch(Exception $explosion) {
//contain the blast
} finally {
//cleanup
//this is not the answer since it executes even if an exception occured
//finally will be available in php 5.5
} else {
//code to be executed only if no exception was thrown
//but no try ... else block exists in php
}
Đây là phương pháp được đề xuất bởi @webbiedave để đáp lại câu hỏi php try .. else. Tôi thấy nó không đạt yêu cầu vì việc sử dụng biến số $caught
bổ sung.
$caught = false;
try {
// something
} catch (Exception $e) {
$caught = true;
}
if (!$caught) {
}
Vì vậy, cách tốt nhất (hoặc tốt nhất) để thực hiện điều này mà không cần thêm biến là gì?
Đặt trong khối thử. Nếu nó có thể ném một ngoại lệ khác mà bạn không muốn bị chặn bởi khối thử bên ngoài, thì hãy sử dụng một lệnh try-catch lồng nhau để nắm bắt ngoại lệ đó. Tuy nhiên, hãy lưu ý rằng bạn không sử dụng ngoại lệ làm điều khiển luồng. – ssube
@peachykeen Điều đó sẽ không hoạt động vì ngoại lệ cần phải bong bóng. –
Nghe có vẻ như bạn đang sử dụng các ngoại lệ để kiểm soát việc thực hiện một chút quá nhiều. Bạn có chắc chắn bạn cần cả hai khối ném và bong bóng sau này? Nó có thể rất tốt là các ngoại lệ * nên * được thay thế bằng một biến và kiểm soát dòng chảy thích hợp. – ssube