2009-04-21 3 views
3

필자는 PHP4의 배경에서 PHP로 오류를 발생시키고 싶을 때 이것을 사용했습니다. 참고 이러한 오류를 처리하기 위해 내 자신의 set_error_handler() 있습니다.PHP5에서 trigger_error()가 더 이상 사용되지 않습니다.

나는 어디에서 기억하지만, 언젠가는 누군가 내가 '예외 사용'을해야한다고 말했습니다. 이전 코드를 많이 고려 했으므로 오류 처리 구현에 대한 좋은 조언을 얻을 때가 왔습니다.

PHP5 (이전 코드를 작성했을 때보 다 조금 더 똑똑했습니다)가 사용되었으므로, 내 trigger_error()은 일을 처리하는 옛 방식이며, 그렇다면 오류를 처리하는 가장 좋은 방법은 무엇입니까? PHP5에서?

답변

4

예, PHP 5 예외 모델을 살펴볼 수 있습니다. 그러나 새로운 것이 있기 때문에 그것이 당신이 그것을 채택해야한다는 것을 의미하지는 않는다는 것을 기억하십시오. 도메인에서 필요하고 의미있는 기능 만 채택하십시오.

그 말은, 예외는 이해하기 좋은 개념이고, 당신이 그것을 채택하지 않기로 결정하더라도 당신은 그 경험에 대해 더 나은 것이라고 느낍니다.

난 당신이 PHP: Exceptions - Manual을 읽을 것을 제안하고 싶습니다 :

PHP 5는 다른 프로그래밍 언어의 그것과 유사한 예외 모델을 가지고있다. PHP 내부에서 예외가 발생하여 캐치 ("catched") 될 수 있습니다. 코드는 잠재적 예외의 catch를 용이하게하기 위해 try 블록 ( )으로 묶을 수 있습니다. 시도 할 때마다 블록에 적어도 하나의 해당 캐치가 있어야합니다. 블록. 다중 catch 블록은 exeptions의 다른 클래스를 catch하는 데 사용되는 이 될 수 있습니다. 정상 실행 (시도 블록 내에 예외가 throw되거나 예외 클래스가 일치하는 catch가 이 아닌 경우) 마지막으로 catch 블록이 순서대로 정의 된 후에 계속됩니다. catch 블록 내에서 예외를 throw 할 수 있습니다 (또는 가 다시 throw됩니다).

오류가 메서드 내에서 발생하면 나는 또한 (이것은 자바 튜토리얼이지만 개념이 보편적 주)

What Is an Exception?를 읽어 보시기 바랍니다 것이다

는, 메소드는 객체와 떨어져 손을 생성 런타임 시스템에 연결합니다. 예외 오브젝트라고하는 오브젝트에는 오류에 대한 정보 (유형 W 오류 _ 생시의 프로그램 상태 포함)가 있습니다. 예외 객체를 생성하고이를 런타임 시스템으로 전달하는 것을 예외를 던지기라고합니다.

편집 : 글로벌 예외 핸들러를 구현하기 위해, 당신은 우리에게 set_exception_handler 기능을 원할 것입니다 (기본적으로 이전에 처리되지 않은 예외를 처리하는 기본 예외 핸들러를 설정하기 위해).

+0

set_error_handler (같은 모든 예외를 잡을 수있는 일반적인 방법이 있나요) 모든 오류를 처리 : 여기

작은 예입니다? 아니면 이전 PHP4 사고 방식에 아직도 있습니까? 귀하의 답변을 주셔서 감사합니다, BTW. – alex

+1

예, 익숙한 것과 비슷한 것을 할 수 있습니다 (제 편집 참조). 그러나 나는 당신이 생각하는 것보다 훨씬 융통성이있어 예외에 대해 좀 더 읽고 싶을 것이라고 생각합니다. 이해하고 복구 할 수있는 예외 만 처리 한 다음 기본 예외 처리기를 사용하여 처리되지 않은 예외를 기록한 다음 응용 프로그램을 종료하는 것이 좋습니다. –

+0

위대한 답변과 편집 :) 나는 이것들을 조사 할 것입니다 ... – alex

2

예외를 사용하면 응용 프로그램 오류를 트리거하고 처리 할 수있는 객체 지향적 인 방법입니다.

exceptions에 대한 PHP 매뉴얼 주제는 아마도 시작하기에 좋은 장소 일 것입니다.

function doSomething() { 
    if ($error) { 
     throw new Exception('Some descriptive error message.'); 
    } 
} 

try { 
    doSomething(); 
} 
catch (Exception $e) { 
    die('<p class="error">' . $e->getMessage() . '</p>'); 
} 
+0

은 getMessage() 어떤 예외의 인수를 얻을 수있는 방법입니까? – alex

+2

예, 예외 메시지가 표시됩니다. http://php.net/manual/en/exception.getmessage.php –

관련 문제