>  기사  >  백엔드 개발  >  PHP 예외에 관한 질문

PHP 예외에 관한 질문

WBOY
WBOY원래의
2016-09-08 08:43:571297검색

일반적으로 후속 처리를 위해 PHP 예외 정보를 수집하려면 예외 처리기를 설정하거나 기본 클래스를 상속하여 예외 하위 클래스를 작성합니다. 여기서는 등록된 예외 처리기를 사용합니다. 잘 이해되지 않는 몇 가지 문제에 직면했습니다

1: 예외가 발생하면 프로그램이 종료되는데, 특정 상황에서 예외가 발생하면 프로그램이 종료되지 않는다는 내용을 이전에 어디선가 본 기억이 납니다. .

2: 예외 핸들러를 등록한 후 코드 세그먼트에서 예외를 발생시키려고 하면 등록된 함수가 실행되지 않습니다. 왜 그런지 잘 모르겠습니다.

3: 예외 설계와 관련하여 일부 로그 수집을 용이하게 하기 위해 예외 로그를 ​​수집하는 방법은 일반적으로 예외 처리기를 등록한 다음 이 기능을 사용하여 구성하고 수집했습니다. 이 기능이 실행되지 않아서 로그 수집 설계를 어떻게 하는지 모르겠습니다. 대중 과학을 알려주세요.

답글 내용:

일반적으로 후속 처리를 위해 PHP 예외 정보를 수집하려면 예외 처리기를 설정하거나 기본 클래스를 상속하여 예외 하위 클래스를 작성합니다. 여기서는 등록된 예외 처리기를 사용합니다. 잘 이해되지 않는 몇 가지 문제에 직면했습니다

1: 예외가 발생하면 프로그램이 종료되는데, 특정 상황에서 예외가 발생하면 프로그램이 종료되지 않는다는 내용을 이전에 어디선가 본 기억이 납니다. .

2: 예외 핸들러를 등록한 후 코드 세그먼트에서 예외를 발생시키려고 하면 등록된 함수가 실행되지 않습니다. 왜 그런지 잘 모르겠습니다.

3: 예외 설계에 대해서는 일부 로그 수집을 용이하게 하기 위해 일반적으로 예외 처리기를 등록한 다음 이 기능을 사용하여 정리하고 수집했습니다. 이 기능이 실행되지 않아서 로그 수집 설계를 어떻게 하는지 모르겠습니다. 대중 과학을 알려주세요.

thinkphp의 E 메소드는 예외로 주로 오류를 발생시키고 직접 종료하는 데 사용됩니다.
try 사용법은 이미 알고 있으니 예외를 잡아서 예외 후에 해야 할 일을 적어두면 됩니다.

<code><?php
 try {
     $mgr = new CommandManager();
     $cmd = $mgr->getCommandObject("realcommand");
     $cmd->execute();
 } catch (Exception $e) {
     print $e->getMessage();
     exit();
 }
 ?></code>

1. 내가 지금까지 알고 있는 것은 try catch에서 예외가 발생하면 프로그램이 종료되지 않는다는 것입니다.
2. 매뉴얼에 set_Exception_handler에 대한 지침이 있습니다.
기본 예외 처리기를 설정합니다. 🎜>은 try/catch 블록을 사용하여 catch되지 않는 예외를 사용합니다. 예외_처리기가 호출된 후 예외가 중단됩니다. 3. catch는 예외를 캡처하므로 예외 처리기는 당연히 해당 코드 세그먼트에서 예외를 수집할 수 없습니다.
함수 _Exception_handler($Exception)

<code>{
    $_error =& load_class('Exceptions', 'core');
    $_error->log_exception('error', 'Exception: '.$exception->getMessage(), $exception->getFile(), $exception->getLine());

    // Should we display the error?
    if (str_ireplace(array('off', 'none', 'no', 'false', 'null'), '', ini_get('display_errors')))
    {
        $_error->show_exception($exception);
    }

    exit(1); // EXIT_ERROR
} </code>
위는 CI 프레임워크에 포함된 커스텀 예외 함수이므로 로그는 getMessage와 오류가 발생한 코드 파일 및 줄 번호를 수집하는 것에 지나지 않습니다. 예를 들어 CI는 코드가 발생할 때 컨트롤러와 작업을 캡처할 수도 있습니다

Exception은 Error에 비해 더 완전한 오류 처리 메커니즘입니다. Exception은 더 완전한 스택 처리 방법을 갖습니다.

또한 예외를 처리한 후 프로그램이 원래 위치로 돌아가지 않고 계속 실행되도록 결정합니다(오류가 발생해도 괜찮습니다).

실행을 계속할 수 없는 이유는 예외와 오류의 처리 메커니즘이 다르기 때문입니다.

오류 처리는 오류가 발생한 위치에서 중단하고 오류 처리 기능으로 점프한 후 다시 다음으로 점프하는 것입니다. 처리가 완료된 후 인터럽트를 수행하여 실행을 계속할 수 있습니다.
예외 처리란 스택을 밀어 올려 예외를 잡을 수 있는 프로그램 세그먼트를 찾아 예외를 처리하는 것입니다. 스택이 지워졌기 때문에 더 이상 원래 실행 위치로 돌아갈 수 없습니다.

예외 처리기 함수는 함수형 프로그래밍과 호환되도록 PHP에서 만든 함수입니다. 그러나 이는 실제로 표준 예외 처리 방법을 따르지 않습니다. 예외 처리는 try {} catch {}를 사용하여 가장 잘 구현됩니다.

말씀하신 대로 예외가 내부 캐치를 뚫고 외부 캐치에 걸리도록 하려면 내부 캐치에 $e를 던지면 됩니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.