PHP 의 경우 Error 와 Exception 을 구분합니다.
PHP 7 에서는 Error 중 E_ERROR, E_RECOVERABLE_ERROR 의 경우 Exception 처럼 사용(try, catch, finally)이 가능합니다.(그 외 Error 는 기존의 방식과 동일합니다.) 하지만, Exception 처럼 사용이 가능하다고 Exception 클래스를 상속받은 것은 아닙니다. 별도의 Error 클래스를 상속받았지요.
다만, Exception 과 Error 클래스는 모두 Throwable 인터페이스를 상속하여 구현되었습니다.
Throwable {
abstract public string getMessage ( void )
abstract public int getCode ( void )
abstract public string getFile ( void )
abstract public int getLine ( void )
abstract public array getTrace ( void )
abstract public string getTraceAsString ( void )
abstract public Throwable getPrevious ( void )
abstract public string __toString ( void )
}
PHP 5 에서 모든 예외에 대한 catch 처리는 다음과 같습니다.
try {
} catch (Exception $e) {
}
PHP 7 에서는 E_ERROR 와 E_RECOVERABLE_ERROR 의 경우도 가능하므로...
try {
} catch (Exception $e) {
} catch (Error $e) {
}
이 둘을 합친다면...(PHP 7 이상 에서만 가능합니다)
try {
} catch (Throwable $t) {
}
PHP 5, PHP 7 모두 사용이 가능한 코드는 다음과 같습니다.
try {
} catch (Throwable $t) {
// PHP 5 에서는 실행되지 않습니다.
// PHP 7 에서는 실행됩니다.
} catch (Exception $e) {
// PHP 5 에서는 실행됩니다.
// PHP 7 에서는 여기까지 도달하지 않습니다.
}
물론, 전역 Error 처리기를 사용하여 PHP 5 에서도 Error 를 Exception 으로 처리가능합니다.
<?php
set_error_handler(function ($errno, $errstr, $errfile, $errline) {
if(!(error_reporting() & $errno)) {
return;
}
throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});
restore_error_handler();
error_reporting 설정은 php.ini 에서 합니다. 여기서 ErrorException 은 Exception 클래스의 자손입니다. 다만, 상기의 경우 E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING과 E_STRICT 오류 등은 불가능합니다.
'프로그래밍 > Web' 카테고리의 다른 글
Angular 에서 RxJS unsubscribe() 관련 팁 (0) | 2017.04.27 |
---|---|
Laravel 점검 모드에서 AWS ELB health 검사 (0) | 2017.04.25 |
Angular4 업그레이드하기 (0) | 2017.03.28 |
Laravel5 + Angular2 + Fuse-box 사용하기 (0) | 2017.02.17 |
PhpStorm 의 .idea 디렉토리 git ignore 처리하기 (0) | 2016.12.26 |
댓글