언어 레퍼런스
PHP Manual

예외

Table of Contents

PHP 5는 다른 프로그래밍 언어와 유사한 예외 모델을 가지고 있습니다. 예외는 throw해서, PHP 안에서 잡을("catch") 수 있습니다. 잠재적인 예외를 쉽게 잡기 위해서 코드를 try 블럭으로 감쌀 수 있습니다. 각 try는 최소한 하나의 해당하는 catch 블럭을 가져야 합니다. 여러 catch 블럭은 각각 다른 예외 클래스를 잡을 수 있습니다. 일반적인 실행(try 블럭에서 예외를 던지지 않거나, 던져진 예외 클래스에 해당하는 catch가 없을 경우)은 마지막 catch 블럭 정의 이후로 진행합니다. 예외는 catch 블럭 안에서 throw할(또는 다시 던질) 수 있습니다.

예외가 던져지면, 따라오는 구문은 실행되지 않고, PHP는 첫번째 해당하는 catch 블럭을 찾습니다. 예외를 잡지 않으면, set_exception_handler()로 핸들러를 정의하지 않는 한, "Uncaught Exception ..." 메세지로 PHP Fatal Error가 발생합니다.

Note: 내부 PHP 함수는 주로 오류 보고를 사용합니다. 최근의 객체 지향 확장만 예외를 사용합니다. 그러나, 오류는 간단히 ErrorException으로 변환할 수 있습니다.

Tip

표준 PHP 라이브러리(SPL)는 좋은 내장 예외를 제공합니다.

Example #1 예외 던지기

<?php
function inverse($x) {
    if (!
$x) {
        throw new 
Exception('Division by zero.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Caught exception: ',  $e->getMessage(), "\n";
}

// 계속 실행
echo 'Hello World';
?>

위 예제의 출력:

0.2
Caught exception: Division by zero.
Hello World

Example #2 중첩 에외

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* rethrow it */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

위 예제의 출력:

string(4) "foo!"

언어 레퍼런스
PHP Manual