2010-09-17 32 views
5

Trong một số thư viện đó là thực tế phổ biến để làm cho các lớp ngoại lệ tùy chỉnh cho mỗi điều kiện lỗi, như:Điểm của việc sử dụng lớp ngoại lệ tùy chỉnh trong php là gì?

class FileNotFound_Exception extends Exception {} 

Bạn có thể xử lý kiểu nhất định ngoại lệ, tuy nhiên bạn không thể đọc được tất cả các mã nguồn của tất cả các thư viện để nhớ mỗi ngoại lệ và không thể tận dụng tối đa các ngoại lệ tùy chỉnh. Hầu hết thời gian tôi chỉ bắt chúng với lớp Cơ sở ngoại lệ:

catch (Exception $e) 
{ 
    // log and display friendly error 
} 

Có cách nào khác để có lợi ích của các lớp ngoại lệ tùy chỉnh mà không viết danh sách dài các khối catch? Tôi thích Ngoại lệ, nhưng không biết cách sử dụng chúng đúng cách. Cảm ơn bạn.

+3

* (bài viết) * [Blog của Ralph Schindler: Các phương pháp hay nhất ngoại lệ trong PHP5.3] (http://ralphschindler.com/2010/09/15/exception-best-practices-in-php-5-3) – Gordon

Trả lời

8

Lợi ích của việc có lớp Ngoại lệ của riêng bạn là bạn, là tác giả của thư viện, có thể nắm bắt và xử lý nó.

try { 
    if(somethingBadHappens) { 
    throw MyCustomException('msg',0) 
    } 
} catch (MyCustomException $e) { 
    if(IcanHandleIt) { 
    handleMyCustomException($e); 
    } else { 
    //InvalidArgumentException is used here as an example of 'common' exception 
    throw new InvalidArgumentException('I couldnt handle this!',1,$e); 
    } 
} 
7

Vâng, các lớp ngoại lệ tùy chỉnh cho phép bạn định tuyến lỗi của mình đúng cách để xử lý tốt hơn.

nếu bạn có một lớp

class Known_Exception extends Exception {} 

và một khối try catch như thế này:

try { 
    // something known to break 
} catch (Known_Exception $e) { 
    // handle known exception 
} catch (Exception $e) { 
    // Handle unknown exception 
} 

Sau đó, bạn biết rằng ngoại lệ $ e là một tình huống lỗi không rõ và có thể xử lý mà theo đó, và đó là khá hữu ích cho tôi.

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