2010-02-20 36 views
27
<?php 
    function some_function($arg) { 
     if($filter->check_for_safe_input($arg)) { 
      throw new Exception("Hacking Attempt"); 
     } 
     do_some_database_stuff($arg); 
    } 
?> 

Trong ví dụ mã ở trên, do_some_database_stuff có được gọi nếu check_for_safe_input không thành công hay không, ngoại trừ chức năng có chạy không? Đó là một cái gì đó tôi đã không bao giờ khá chắc chắn, và thường tôi chỉ dính các chức năng như do_some_database_stuff trong một tuyên bố khác để chắc chắn, nhưng điều này có xu hướng dẫn đến các chức năng lồng nhau.Ngoại lệ PHP có dừng thực thi không?

Trả lời

34

Có, các trường hợp ngoại lệ chưa thực hiện dẫn đến lỗi nghiêm trọng ngăn chặn việc thực thi tập lệnh. Vì vậy, các chức năng do_some_database_stuff sẽ không được gọi nếu một ngoại lệ được ném. Bạn có thể đọc thêm về ngoại lệ trong this article.

+1

Điều gì sẽ xảy ra nếu nó bị chặn trong chức năng gọi điện thoại này? Phần còn lại của hàm này có được chạy không? –

+3

Không, khi bạn ném một ngoại lệ, việc thực thi chức năng bị dừng lại (như thể bạn trả về một số kết quả) và các bong bóng ngoại lệ thông qua ngăn xếp cuộc gọi cho đến khi nó tìm thấy câu lệnh 'catch'. –

+1

Không, quá trình thực hiện tiếp tục trong chức năng bắt; bạn không thể (trong PHP) tiếp tục thực hiện từ nơi mà một ngoại lệ đã dừng nó. – bobince

11

Hãy xem hướng dẫn sử dụng PHP về ngoại lệ.

Khi một ngoại lệ được ném, mã sau khi tuyên bố sẽ không được thực hiện, và PHP sẽ cố gắng tìm khối khớp bắt đầu. Nếu không phát hiện được trường hợp ngoại lệ , Lỗi PHP sẽ được phát hành với thông báo "Không bắt buộc Ngoại lệ ...", trừ khi trình xử lý đã được xác định với set_exception_handler().

http://ch.php.net/exceptions

Vì vậy, có, phần còn lại của hàm không được thực hiện, một lỗi fata xảy ra để thay thế.
Nếu bạn bắt ngoại lệ, việc thực hiện tập lệnh tiếp tục trong khối catch tương ứng, mọi thứ "giữa" hàm sẽ ném ngoại lệ và khối catch không được thực thi.

Các vấn đề liên quan