소개
PHP에서 Exception 클래스는 Throwable 인터페이스를 구현하는 클래스로, 미리 정의된 예외 클래스뿐만 아니라 사용자가 직접 정의하는 모든 예외 클래스의 기반이 되는 최상위 클래스입니다.
Exception 클래스는 Throwable 인터페이스의 메서드를 구현하면서 final로 선언되어 있어 하위 클래스에서 재정의(오버라이드)할 수 없습니다. 다만 __toString() 메서드는 유일하게 재정의가 가능하며, 이를 통해 예외 객체를 문자열 형태로 표현할 수 있습니다.
Exception 클래스의 주요 메서드
| final public function getMessage() | 예외 메시지를 반환합니다 |
| final public function getCode() | 예외 코드를 반환합니다 |
| final public function getFile() | 예외가 발생한 소스 파일명을 반환합니다 |
| final public function getLine() | 예외가 발생한 소스 코드의 라인 번호를 반환합니다 |
| final public function getTrace() | backtrace 정보를 배열 형태로 반환합니다 |
| final public function getPrevious() | 이전에 발생한 예외(중첩된 예외)를 반환합니다 |
| final public function getTraceAsString() | trace 정보를 포맷된 문자열로 반환합니다 |
| public function __toString() | 화면 출력용으로 포맷된 문자열을 반환합니다 |
주의할 점: 사용자 정의 예외 클래스에서 생성자를 재정의하는 경우, 모든 데이터가 올바르게 할당되도록 반드시 parent::__construct()를 호출해야 합니다.
사용자 정의 예외 클래스 예제
다음 예제는 myException이라는 이름의 사용자 정의 예외 클래스를 정의합니다. 이 예외는 $num 변수의 값이 0보다 작거나 100보다 클 때 발생(throw)됩니다.
부모 클래스인 Exception의 getMessage() 메서드는 오류 메시지를 반환하고, getLine() 메서드는 예외가 발생한 코드의 라인 번호를 반환합니다.
<?php
class myException extends Exception{
function message(){
return "error : " . $this->getMessage() . " in line no " . $this->getLine();
}
}
$num=125;
try{
if ($num>100 || $num<0)
throw new myException("$num is invalid number");
else
echo "$num is a valid number";
}
catch (myException $m){
echo $m->message();
}
?>
실행 결과
위 코드를 $num=125로 실행하면 오류 메시지가 출력되고, $num=90으로 실행하면 유효한 숫자라는 메시지가 출력됩니다.
error : 125 is invalid number in line no 10