안녕하세요. 명월입니다.
이 글은 PHP에서 사용되는 예외처리(try ~ catch ~ finally)에 대해서 설명하겠습니다.
예외처리는 따로 PHP라고 해서 특별한 것은 없습니다. 다른 Java나 C#과 비슷한 로직으로 돌아갑니다.
링크 - https://www.php.net/manual/en/language.exceptions.php
예외처리는 프로그램 상에서 예외를 발생시키는 경우가 있는데 그럴 경우 사용하는 것이빈다.
링크 - [C# 강좌 - 21] 예외 처리
링크 - [Java강좌 - 18] 예외 처리
<?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의 종류 별로 에러를 다르게 할 수도 있습니다.
<?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)에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Study > PHP' 카테고리의 다른 글
[PHP] require과 include 그리고 「@」사용법 (0) | 2019.09.18 |
---|---|
[PHP] Fatal 및 Notice, Warnig 에러 메시지 처리하는 방법 (0) | 2019.09.17 |
[PHP] $_SERVER, $GLOBALS, $_GET, $_POST, $_REQUEST, $_COOKIE, $_SESSION, $_FILES, $_ENV(getenv()) (0) | 2019.09.13 |
[PHP] 변수 확인 함수 var_dump, debug_zval_dump, print_r (0) | 2019.09.13 |
[PHP] 배열과 List (0) | 2019.09.10 |
[PHP] 인터페이스와 추상 클래스, 클래스 상속, parent, this (0) | 2019.09.09 |
[PHP] function과 class 사용법, 접근제한자 그리고 static (0) | 2019.09.06 |
[PHP] 기본 페이지 작성 법과 변수 사용법 (0) | 2019.09.05 |