일반적으로 후속 처리를 위해 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>
Exception은 Error에 비해 더 완전한 오류 처리 메커니즘입니다. Exception은 더 완전한 스택 처리 방법을 갖습니다.
또한 예외를 처리한 후 프로그램이 원래 위치로 돌아가지 않고 계속 실행되도록 결정합니다(오류가 발생해도 괜찮습니다).
오류 처리는 오류가 발생한 위치에서 중단하고 오류 처리 기능으로 점프한 후 다시 다음으로 점프하는 것입니다. 처리가 완료된 후 인터럽트를 수행하여 실행을 계속할 수 있습니다.
예외 처리란 스택을 밀어 올려 예외를 잡을 수 있는 프로그램 세그먼트를 찾아 예외를 처리하는 것입니다. 스택이 지워졌기 때문에 더 이상 원래 실행 위치로 돌아갈 수 없습니다.
말씀하신 대로 예외가 내부 캐치를 뚫고 외부 캐치에 걸리도록 하려면 내부 캐치에 $e를 던지면 됩니다.