안녕하세요. 명월입니다.
이 글은 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)에 대한 설명이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'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 |