2009-06-05 1 views
5

나는이 검색되고 난 그냥 같은 기사로 실행하는 것,이 코드 :

try 
    { 
     //some code 

    } 
    catch(Exception $e){ 
     throw $e; 
    } 

어디 $ 전자가 저장됩니다 않거나 웹 마스터는 그것을보고 어떻게? 특별한 기능을 찾아야할까요?

답변

7

catch {} 블록 내부에서 던져진 Exception object (이 경우 $ e)은 다음 try {} catch {} 블록에서 catch됩니다. 여기

바보 예제 :

try { 
    try { 
     throw new Exception("This is thrown from the inner exception handler."); 
    }catch(Exception $e) { 
     throw $e; 
    } 
}catch(Exception $e) { 
    die("I'm the outer exception handler (" . $e->getMessage() . ")<br />"); 
} 

위의 출력

이다 I있어 외부 예외 핸들러 (이는 내부 예외 핸들러로부터 발생된다.)

+0

감사 표시를 할, 내 newbiness 변명하지만, 어떻게 할 getMessage를 검사하여 어떤 오류가 발생하는지 확인합니다. – jcslzr

+4

$ e-> getMessage()는 오류 메시지와 함께 문자열을 반환하는 함수입니다. 예제 # 1 here (http://www.php.net/manual/en/language.exceptions.extending.php)에는 표준 Exception 객체에서 사용할 수있는 메소드에 대한 좋은 정보가 있습니다. –

+1

감사합니다. 확인해 보겠습니다. CS – jcslzr

1

$e의 인스턴스입니다. 예외 또는 Exception. 이러한 객체에는 공통적으로 사용할 수있는 특정 속성과 메소드가 있습니다 (Exception 클래스에서 상속). 자세한 내용은 chapter about exceptionsException member list을 참조하십시오.

1

귀하의 코드에 예외를 던지고있는이 코드에 제 3 자의 코드/라이브러리를 사용하고 있다고 가정합니다. 잡기 위해 던져 질 예외에 대한 준비 만하면됩니다. 그런 다음 원하는대로 로그/표시 할 수 있습니다. 자세한 내용은

try { 
    $Library->procedure(); 
catch(Exception $e) { 
    echo $e->getMessage(); //would echo the exception message. 
} 

Exceptions에 PHP 설명서의 항목을 참조하십시오.

1

의 선 :

catch(Exception $e){ 
    throw $e; 
} 

돈 \ t 메이크 감각.

catch(Exception $e){ 
    error_log($e->getMessage()); 
    die('An error has occurred'); 
} 

을하지만 귀하의 경우에는 예외 이미 일어날 외부의 시도 블록에 직접 발생합니다 : 당신이 예외를 잡을 때이 같은 예외로 뭔가를 생각하고 있습니다. 동일한 동작을 만들겠습니까

//some code 

: 당신은 당신의 코드를 변경하는 경우
.

+0

예! 예외가 잡히고 다시 던져지는 코드를 보는 것은 싫다. 예외 처리에는주의가 주어지지 않아 깨끗한 코드 대신 큰 시스템에서 임의의 오류 처리가 발생하고 문제를 쉽게 진단 할 수 있습니다. – grantwparks

5

좋은 점은 Exception이 __toString()을 구현하고 호출 스택 추적을 출력한다는 것입니다. 그래서 가끔 내가 캐치 (에에 도착하는 방법을보고 싶어 나는거야 알고 낮은 수준의 예외에

) 단순히

error_log($e); 
+0

감사합니다. docs는 error_log()에 Exception 객체를 전달하는 것을 보여주지 않습니다. 나는이 기능을 오랫동안 길 찾기를하고 있다고 생각했다. 붙잡고, 처리하고, 기본 처리기로 기록하고, 시도하고 찾을 때까지 힘들이지 않았다. – ddowns

+0

대단히 반갑습니다. 나는 기본적으로 Exception의'__toString()'구현의 스택 트레이스 측면을 우연히 발견하고 그것을 사용하여 우리가 사용하던 레거시 함수를 대체했다. – grantwparks