Tôi đã viết lớp xử lý lỗi đã chia tất cả các lỗi thành các lỗi bình thường [thông báo, cảnh báo, ...] và các lỗi quan trọng.
Bây giờ tôi đã phát hiện ra rằng đó là một thực hành tốt để chuyển đổi tất cả các lỗi thành ngoại lệ. Nó cũng sẽ rút ngắn mã của tôi.
Tuy nhiên, tôi không chắc làm thế nào để xử lý điều này ...
- Có những trường hợp ngoại lệ không dừng thực thi tập lệnh và các ngoại lệ làm? Nếu không có ... làm thế nào để khác nhau các lỗi đã chuyển đổi?
- Chuyển đổi lỗi thành ngoại lệ được thực hiện bằng cách gọi set_error_handler [] và ném errorException [] mới vào đó ... Điều gì tiếp theo? set_exception_handler [] được gọi là tự động?
Peehaa
70.2K58 Huy hiệu vàng185 Huy hiệu bạc260 Huy hiệu Đồng58 gold badges185 silver badges260 bronze badges
Đã hỏi ngày 25 tháng 11 năm 2012 lúc 17:45Nov 25, 2012 at 17:45
2
Các trường hợp ngoại lệ không ngăn chặn kịch bản của bạn, tất cả những người chưa được thực hiện.all uncaught ones do.
Không,
set_exception_handler[]
không được gọi tự động, bạn có thể làm điều đó nếu bạn thích.set_exception_handler[]
is not called automatically, you can do that if you like.Trình xử lý ngoại lệ mà bạn đặt với
set_exception_handler[]
được gọi sau khi một ngoại lệ đã không được thực hiện, đó là đoạn mã cuối cùng được gọi trước khi tập lệnh chấm dứt. Đảm bảo rằng nó không gây ra lỗi/ngoại lệ, hoặc nó sẽ kết thúc tồi tệ.
Đã trả lời ngày 25 tháng 11 năm 2012 lúc 17:48Nov 25, 2012 at 17:48
phant0mphant0mphant0m
16.3k5 Huy hiệu vàng47 Huy hiệu bạc81 Huy hiệu đồng5 gold badges47 silver badges81 bronze badges
4
- Có những trường hợp ngoại lệ không dừng thực thi tập lệnh và các ngoại lệ làm? Nếu không có ... làm thế nào để khác nhau các lỗi đã chuyển đổi?
Chuyển đổi lỗi thành ngoại lệ được thực hiện bằng cách gọi set_error_handler [] và ném errorException [] mới vào đó ... Điều gì tiếp theo? set_exception_handler [] được gọi là tự động?
try {
// ...
} catch [ErrorException $e] {
// converted error [probably]
} catch [Exception $e] {
// another kind of exception; this basically catches all
}
Or:
function handle_exception[Exception $e]
{
if [$e instanceof ErrorException] {
// converted error [probably]
} else {
// another kind of exception
}
}
set_exception_handler['handle_exception'];
Peehaa
- Chuyển đổi lỗi thành ngoại lệ được thực hiện bằng cách gọi set_error_handler [] và ném errorException [] mới vào đó ... Điều gì tiếp theo? set_exception_handler [] được gọi là tự động?
Peehaa
70.2K58 Huy hiệu vàng185 Huy hiệu bạc260 Huy hiệu ĐồngNov 25, 2012 at 18:11
Đã hỏi ngày 25 tháng 11 năm 2012 lúc 17:45Ja͢ck
Các trường hợp ngoại lệ không ngăn chặn kịch bản của bạn, tất cả những người chưa được thực hiện.37 gold badges257 silver badges306 bronze badges
0
Không, set_exception_handler[]
không được gọi tự động, bạn có thể làm điều đó nếu bạn thích.
Trình xử lý ngoại lệ mà bạn đặt với
set_exception_handler[]
được gọi sau khi một ngoại lệ đã không được thực hiện, đó là đoạn mã cuối cùng được gọi trước khi tập lệnh chấm dứt. Đảm bảo rằng nó không gây ra lỗi/ngoại lệ, hoặc nó sẽ kết thúc tồi tệ.If an exception is not caught, a PHP Fatal Error will be issued with an "Uncaught Exception ..." message, unless a handler has been defined with set_exception_handler[].
Đã trả lời ngày 25 tháng 11 năm 2012 lúc 17:48
16.3k5 Huy hiệu vàng47 Huy hiệu bạc81 Huy hiệu đồng
Các trường hợp ngoại lệ không dừng thực thi tập lệnh nếu chúng bị bắt. Để nhận ra một lỗi đã chuyển đổi:
Lưu ý rằng ErrorException
có thể được ném bởi bất kỳ đoạn mã nào, nhưng nó chỉ nhằm chuyển đổi các lỗi thường xuyên trong các chức năng đã đăng ký set_error_handler[]
.Nov 25, 2012 at 17:49
Nếu ném ErrorException
từ hàm xử lý lỗi của bạn không bị bắt ở bất kỳ nơi nào khác trong mã của bạn, trình xử lý ngoại lệ đã đăng ký [được đặt bằng set_exception_handler[]
] sẽ được gọi.Marcin Orlowski
Đã trả lời ngày 25 tháng 11 năm 2012 lúc 18:1110 gold badges118 silver badges137 bronze badges
Ja͢ckja͢ck
set_error_handler[function [$severity, $message, $file, $line] {
echo 'You will never see this.'
}];
// Provoke an error
function_that_does_not_exist[];
168K37 Huy hiệu vàng257 Huy hiệu bạc 306 Huy hiệu đồng
Bất kỳ ngoại lệ chưa học sẽ ngừng thực thi tập lệnh của bạn.Oct 24, 2016 at 12:38
Khi một ngoại lệ được ném, mã theo câu lệnh sẽ không được thực thi và PHP sẽ cố gắng tìm khối bắt khớp đầu tiên. Nếu một ngoại lệ không bị bắt, một lỗi nghiêm trọng của PHP sẽ được đưa ra với một thông báo "ngoại lệ không bị tổn thương ...", trừ khi một trình xử lý đã được xác định với set_exception_handler [].AndreKR
Xem tài liệu về điều này16 gold badges103 silver badges161 bronze badges
1