[PHP] 예외처리(try ~ catch ~ finally)


Study/PHP  2019. 9. 11. 23:41

안녕하세요. 명월입니다.


이 글은 PHP에서 사용되는 예외처리(try ~ catch ~ finally)에 대해서 설명하겠습니다.


예외처리는 따로 PHP라고 해서 특별한 것은 없습니다. 다른 Java나 C#과 비슷한 로직으로 돌아갑니다.

링크 - https://www.php.net/manual/en/language.exceptions.php


예외처리는 프로그램 상에서 예외를 발생시키는 경우가 있는데 그럴 경우 사용하는 것이빈다.

링크 - [C# 강좌 - 21] 예외 처리

링크 - [Java강좌 - 18] 예외 처리

Copy!
 [소스 보기] 
<?php
$title = "title";
function example() {
throw new Exception('Exception!!!');
}
$errorMessage = "";
$check = 0;
try{
example();
// check 값을 1 증가시킨다.
$check += 1;
} catch(Exception $e){
$errorMessage = $e;
} finally {
// check 값을 1 증가시킨다.
$check += 1;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
<?=$title?>
</title>
</head>
<body>
<?=$errorMessage?>
<br />
<?=$check?>
</body>
</html>

위 소스에서 example함수는 호출되면 throw로 Exception을 던집니다. 다시 메인 으로 돌아와서 try ~ catch ~ finally 구문에서 try의 안에는 example 함수를 호출합니다.

example함수에서는 throw로 Exception을 던지기 때문에 catch로 넘어가고 $errorMessage라는 변수에 에러 내용을 넣습니다.

최종적으로 try ~ catch에서 에러 발생 여부와 관계없이 finally가 호출되는데 $check값을 1 증가 시키네요.


결과는 에러메시지와 $check값의 1이 나온것을 확인할 수 있습니다.

여기서 포인트는 try 구문에도 check값을 1 증가시키는 구문이 있습니다만, example에서 Exception이 발생하므로 check가 1 증가하는 것은 실행되지 않습니다.


기본적으로 throw 던지면 try ~ catch에서 받습니다만, Exception 클래스를 상속받아서 catch의 종류 별로 에러를 다르게 할 수도 있습니다.

Copy!
 [소스 보기] 
<?php
// Exception을 상속받는다.
class MyException1 extends Exception { }
class MyException2 extends Exception { }
$title = "title";
function example($type) {
if($type == 1){
throw new MyException1('MyException1!!!');
}
if($type == 2){
throw new MyException2('MyException2!!!');
}
throw new Exception('Exception!!!');
}
$errorMessage = "";
$check = 0;
try{
// MyException1를 발생 유도한다.
example(1);
$check += 1;
} catch(MyException1 $e){
$errorMessage = $e;
$check = 100;
} catch(MyException2 $e){
$errorMessage = $e;
$check = 1000;
} catch(Exception $e){
$errorMessage = $e;
} finally {
$check += 1;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>
<?=$title?>
</title>
</head>
<body>
<?=$errorMessage?>
<br />
<?=$check?>
</body>
</html>

example 함수에 1이라는 값을 넣어서 MyException1를 발생시켰습니다.

catch에서는 MyException1, MyException2, Exception를 예외를 설정하고 결과를 보면 check값이 101이 되었기 때문에 MyException1의 구문이 실행된 것을 확인할 수 있습니다.

참고로 MyException1를 발생시켰지만 catch에서 MyException1가 없으면 Exception으로 실행됩니다.


여기까지 PHP의 예외처리(try ~ catch ~ finally)에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.

최근에 올라온 글