Vì vậy, tôi đã đọc về các ngoại lệ ngày hôm nay trên hướng dẫn sử dụng PHP trực tuyến, và nhận ra tôi vẫn chưa hiểu mục đích hoặc sự cần thiết thực sự của từ khóa cuối cùng. Tôi đã đọc một số bài viết ở đây, vì vậy câu hỏi của tôi hơi khác một chút.Làm thế nào keywod 'cuối cùng' có nghĩa là được sử dụng trong PHP
tôi hiểu rằng chúng tôi có thể sử dụng cuối cùng theo cách này:
function hi(){
return 'Hi';
}
try {
throw new LogicException("Throw logic \n");
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}
echo hi();
đầu ra:
Fatal error: Uncaught LogicException: Throw Logic in C:\Users\...a.php:167
Stack trace:
#0 {main}
thrown in C:\Users\...a.php on line 167
Vì vậy, trong trường hợp này các chức năng hi(); không được thực hiện và vì một lý do chính đáng. Tôi hiểu nếu ngoại lệ không được xử lý thông dịch viên php sẽ tạm dừng tập lệnh. tốt. Cho đến nay từ những gì tôi đọc, cuối cùng cho phép chúng ta thực thi hàm hi(); ngay cả khi ngoại lệ không được xử lý (mặc dù tôi không biết tại sao)
Vì vậy, điều này tôi hiểu.
try {
throw new LogicException("Throw logic \n");
} catch (InvalidArgumentException $e) {
echo $e->getMessage();
}finally{
echo hi();
}
đầu ra:
Hi
Fatal error: Uncaught LogicException: Throw Logic in C:\Users\...a.php:167
Stack trace:
#0 {main}
thrown in C:\Users\...a.php on line 167
này trên nên các lỗi ngoại lệ cũng như 'hi' thông điệp từ chức năng, thậm chí những người tôi không biết bất kỳ việc sử dụng cho việc này. Nhưng những gì tôi không nhấn mạnh điều này, ngay cả khi chúng tôi bắt các LogicException
với bắt (LogicException $e)
và không có trường hợp ngoại lệ được ném vẫn còn chúng tôi sẽ thấy chức năng đang được thực hiện, và chúng tôi sẽ thấy thông báo 'hi'. như trong ví dụ này
try {
throw new LogicException("Throw logic \n");
} catch (LogicException $e) {
echo $e->getMessage();
}finally{
echo hi();
}
đầu ra
// Throw logic
// Hi
Vì vậy, chúng tôi vẫn thấy chức năng hi()
thực hiện mặc dù chúng tôi không có trường hợp ngoại lệ của router. Tại sao và việc sử dụng cho điều này là gì? Tôi nghĩ rằng khối cuối cùng đã được sử dụng như một phương sách cuối cùng trong trường hợp ngoại lệ đã không bị bắt, ngay cả khi đó không phải là trường hợp thì tại sao nó được sử dụng để chạy nó?
Điều gì Bạn đang sử dụng phiên bản PHP nào? Chức năng True 'final' không được thêm vào cho đến khi PHP 5.5. –
@AlecGordon php 7.0.1 –
Ồ, thật lạ lùng. Theo [phân tích này] (https://adayinthelifeof.nl/2013/02/12/php5-5-trycatchfinally/) khối cuối cùng nên được in trước khi ngoại lệ không bị bắt. –