PHP 오류 처리 (Errors)
PHP 오류 처리 (Errors)
아무리 꼼꼼히 코드를 써도 프로그램은 어느 순간 예상 밖의 상황과 만나요. 파일이 없을 수도, 숫자 계산이 형식에 안 맞을 수도 있죠. 이때 프로그램이 조용히 멈추거나 이상한 값을 내뱉지 않도록, PHP가 어떤 오류를 어떻게 알려주는지 알고 있으면 디버깅이 훨씬 수월해져요. PHP는 흔한 코딩·런타임 문제에 대해 오류(error)·경고(warning)·알림(notice)을 알려줘요.
출처: PHP 매뉴얼 - Errors
본문
오류의 수준
PHP는 문제의 심각도에 따라 오류를 여러 수준으로 나눠요. 간단히 보면 이렇게 갈라져요.
- Error(치명적 오류): 실행을 중단해야 하는 심각한 문제예요.
- Warning(경고): 문제가 있지만 실행은 계속되는 비치명적 오류예요.
- Notice(알림): 사소한 문제로, 일반적으로 권장되지 않는 사용을 알려줘요.
이 수준들을 error_reporting()으로 설정하고, ini_set('display_errors', true) 같은 설정으로 어디까지 화면에 보여줄지 조절해요.
Throwable 인터페이스
PHP 7부터 모든 오류와 예외는 Throwable 인터페이스를 기반으로 하는데, 크게 두 갈래예요.
Exception: 개발자가 의도적으로 던지고 잡는 예외의 기본 클래스예요.Error: 치명적인 런타임 문제를 나타내는 내부 오류예요.
둘 다 Throwable을 구현하므로, 어떤 오류든 한 곳에서 잡아내고 싶다면 catch (Throwable $e)로 처리하면 돼요.
예외 던지기와 잡기
문제 상황에서 throw 키워드로 Exception을 던지면, try/catch 블록에서 잡아 처리할 수 있어요. finally 블록은 예외가 있든 없든 항상 실행돼요.
function divide($a, $b) {
if ($b === 0) {
throw new Exception("0으로 나눌 수 없어요");
}
return $a / $b;
}
try {
echo divide(10, 0);
} catch (Exception $e) {
echo "오류: " . $e->getMessage();
} finally {
echo " — 처리가 끝났어요";
}
가능한 Exception보다 구체적인 예외 클래스를 던지고, 필요하면 catch를 여러 개 써서 오류 종류별로 다르게 대응해요.
사용자 오류 핸들러
PHP 7 이전에는 치명적 오류를 try/catch로 잡지 못하고 set_error_handler() 같은 함수로 처리해야 했어요. PHP 7 이후로는 치명적 오류가 Error 객체로 던져져서 예외처럼 잡을 수 있어요. 그래서 현대적 코드에서는 try/catch (Throwable) 패턴이 오류 처리의 중심이 돼요.
디버깅을 위해 error_reporting(E_ALL)로 모든 수준의 오류를 켜 두면, 놓친 문제를 조기에 발견하기 쉬워져요.