programing

PHP 오류 처리: die() Vs 트리거_error() Vs throw 예외

sourcejob 2022. 11. 24. 21:40
반응형

PHP 오류 처리: die() Vs 트리거_error() Vs throw 예외

PHP에서의 에러 처리에 대해서--제가 아는 한, 다음의 3가지 스타일이 있습니다.

  1. die()또는exit()스타일:

    $con = mysql_connect("localhost","root","password");
    
    if (!$con) {
     die('Could not connect: ' . mysql_error());
    }
    
  2. throw Exception스타일:

     if (!function_exists('curl_init')) {
    
          throw new Exception('need the CURL PHP extension. 
                               Recomplie PHP with curl');
        }
    
  3. trigger_error()스타일:

    if(!is_array($config) && isset($config)) {
            trigger_error('Error: config is not an array or is not set', E_USER_ERROR);
        }
    

PHP 매뉴얼에서는 3가지 방법을 모두 사용하고 있습니다.

  • 제가 알고 싶은 것은 어떤 스타일을 선호해야 하는지, 그 이유는 무엇입니까?

  • 이 세 방울의 교환은 서로 교환할 수 있기 때문에 서로 교환하여 사용할 수 있습니까?

약간 OT: PHP 오류 처리 옵션이 너무 많아서 PHP 개발자를 혼란스럽게 하나요?

첫 번째 코드는 최종 사용자와 무관한 정보를 전송하기 때문에 프로덕션 코드에서 사용하지 마십시오(사용자는 "데이터베이스에 연결할 수 없습니다"에 대해 아무것도 할 수 없습니다).

특정 중요한 코드 포인트에서 응용 프로그램이 실패할 수 있으며 여러 콜레벨에서 코드를 회복할 필요가 있는 경우 예외를 발생시킵니다.

trigger_error()그럼 에러 리포트(다른 수준의 에러 메시지 사용)를 미세 조정할 수 있습니다.또, 이러한 에러는 최종 유저로부터 숨길 수 있습니다( 를 사용).다만, 테스트중에 표시되도록 할 수 있습니다.

또한.trigger_error()는 커스텀 에러 핸들러를 사용하여 실가동 코드로 억제할 수 있는 개발 중에 중요한 비메시지를 생성할 수 있습니다.치명적인 오류도 발생할 수 있습니다(E_USER_ERROR하지만 복구가 불가능합니다.이 중 하나를 트리거하면 해당 시점에서 프로그램 실행이 중지됩니다.따라서 치명적인 오류의 경우 예외를 사용해야 합니다.이렇게 하면 프로그램 흐름을 더 잘 제어할 수 있습니다.

// Example (pseudo-code for db queries):

$db->query('START TRANSACTION');

try {
    while ($row = gather_data()) {
       $db->query('INSERT INTO `table` (`foo`,`bar`) VALUES(?,?)', ...);
    }
    $db->query('COMMIT');
} catch(Exception $e) {
    $db->query('ROLLBACK');
}

여기, 만약gather_data()(사용하는) 단순한 개코원숭이E_USER_ERROR또는die())기회가있다,이전INSERT스테이트먼트는, 바람직하지 않은 경우라도, 데이타베이스에 넣을 수 있어 다음에 일어날 일을 제어할 수 없게 됩니다.

개발 코드의 간단한 디버깅에는 보통 첫 번째 방법을 사용합니다.생산에는 권장되지 않습니다.가장 좋은 방법은 예외를 발생시키는 것입니다.이 예외는 프로그램의 다른 부분에서 포착하여 오류 처리를 수행할 수 있습니다.

이 세 가지 스타일은 서로 대체되지 않습니다.첫 번째는 에러가 아니라 스크립트를 정지하고 디버깅 정보를 출력하여 수동으로 해석하는 방법입니다.두 번째는 그 자체가 오류가 아니라 검출되지 않으면 오류로 변환됩니다.마지막 에러는 PHP 엔진에서 실제 에러를 트리거하고 있습니다.이 에러는, PHP 환경의 설정에 따라서 처리됩니다(유저에게 표시되는 경우도 있고, 파일에 로그 했을 뿐이거나 전혀 보존되어 있지 않은 경우도 있습니다).

언급URL : https://stackoverflow.com/questions/7063053/php-error-handling-die-vs-trigger-error-vs-throw-exception

반응형