2011-05-03 2 views
24

좋아, 그 많은 사람에 대한 매우 절름발이 질문하지만 나는 대답을 압도적 인 반응을 가지고 희망 :PHP 예외 코드는 무엇이 필요합니까? 모든 유스 케이스 시나리오?

나는 PHP에서 예외 던졌습니다. 나는 메시지에 코드를 추가 할 수 있습니다.
예외를 catch하고 해당 형식 (예 : InvalidArgumentException 또는 OutOfBoundException)에 따라 처리합니다. 메시지을 기록하거나 표시하거나 적합한 작업을 수행합니다.
이전 예외를 추가하여 오류의 출처 경로를 추적 할 수도 있습니다.

그러나 사용하지 않았던 적이 한 번도 없었습니다. 얼마나 유용합니까? 코드? 예를 들어

:

throw new Exception("db Error", $code, $previousException); 

내가 $code로 무엇을 할 수 있습니까?

+0

(관련 없음 : "유스 케이스 시나리오"가 2 중임을 확신합니다 ...) – Rudie

+0

그냥 지적하면 잘못된 방향으로 돌아 가게됩니다. 다음과 같아야합니다 :'새로운 예외 ("db Error", $ code, $ previousException); ' –

답변

31

메시지는 프로그램에 사용하기 위해 사용자에게 표시하기위한 것입니다. 그래서 예를 들어, "데이터베이스 오류"예를 들어, 당신은

  1. 쿼리 동안
  2. 오류를 연결할 수 없습니다

    같은 코드의 집합을 만들 수도 있습니다
  3. 빈 결과
  4. 오류 닫는 연결

그런 다음 적절한 코드를 사용하십시오. 그런 다음 코드의 다른 부분이 예외를 보았을 때, 그들은 무슨 일이 일어 났는지를 알게 될 것이며 지능적으로 처리 할 수 ​​있습니다.

+8

무엇이 선호됩니까? 예외 코드 또는 여러 예외 클래스 ('\ Exception \ MySQL \ ConnectionFailed', \ Exception \ MySQL \ EmptyResultSet 등) 사용? 고마워! :) –

+14

@Phillipe : 개인 선택의 문제입니다. 그러나 일반적으로 사례 수가 적 으면 다른 클래스를 사용하고 코드가 매우 큰 경우 코드를 사용하십시오. 네 가지 경우가있는이 데이터베이스 예제에서 다른 클래스는 OK입니다. 그러나 당신이 잘못 될 수있는 다섯 가지 다른 것들을 생각한다면, 9 개의 다른 예외 클래스를 사용하는 것은 고통 스러울뿐입니다. 코드 만 사용하는 것이 더 합리적 일 것입니다. –

+0

감사합니다. :-) –

10

$code의 해석 방법은 예외 유형에 따라 다릅니다. 예를 들어 MySQL 데이터베이스 오류를 나타내는 Exception 하위 클래스가있는 경우 $code은 원시 MySQL 오류 코드 일 수 있습니다. 낮은 수준의 IO 오류의 경우이 값은 <errno.h> 일 수 있습니다.

기본적으로 $code에는 프로그래밍 방식으로 예외를 처리해야하는 모든 내용이 포함되어야합니다. 대부분의 예외는 어딘가에서 처리해야합니다. 모든 예외가 단순히 오류로 표시되는 경우 $code은 MySQL 클라이언트 라이브러리와 같은 라이브러리의 오류 코드를 포함해야하는 경우에만 유용합니다.

2

$code이 HTTP 상태 코드로 사용되는 구현 (CakePHP)을 보았습니다.

나는 예외의 하위 집합으로 그 개념을 구현했습니다. 따라서 HttpException에서부터 확장 된 모든 예외는 HTTP 오류로 응답합니다.

2

객체 지향 언어에서 예외 유형은 어떤 유형의 오류인지를 전달합니다. 그러나 예를 들어 동일한 예외 유형을 생성 할 수있는 두 가지 사항이있는 경우 오류 코드를 사용하여 세부 정보를 제공 할 수 있습니다.

오류 코드는 비 객체 지향 언어에서 널리 사용되는 기능으로 어떤 유형의 오류인지 알려줍니다.

관련 문제