php 예외처리

·2023년 2월 19일
0

✔ 프로그램이 실행되는 도중 발생하는 예외를 처리를 알아보자

try / catch / finally

try
{
    예외를 처리하길 원하는 실행 코드;
}
catch(예외객체 매개변수)
{
    예외가 발생할 경우에 실행될 코드;
}
finally
{
    try 블록이 종료되면 무조건 실행될 코드;
}

try 블록 내부에서 예외가 발생하면, 예외를 던지(throw)고, 잡아(catch)서 처리하는 구조

try

  • 가장 먼저 실행되는 코드이며, 여기에서 발생한 예외는 catch 블록에서 처리

catch

  • try 블록에서 던져진 예외 코드 처리
  • Exception 객체를 인수로 전달받아 그 처리를 담당

finally

  • try 블록에서 예외가 발생 상관없이 맨 마지막에 무조건 실행

catch와 finally은 선택적인 옵션으로 반드시 사용할 필요 없다.

PHP에서 throw 키워드를 사용하여 예외를 던질 수 있다.

throw 예외객체;

✔ 예외 객체는 반드시 Exception 클래스나 Exception 클래스를 상속받은 자식 클래스

예외 코드 처리 'catch'문 유무에 따른 예시

'catch'문 있을 때 :

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try{
  echo divide(5, 0);
} catch(Exception $e) {
  echo "Unable to divide. ";
} finally {
  echo "Process complete.";
}
?>

함수 divide에서 첫 번째 인자 dividend, 두 번째 divisor를 갖는다.
if문에서 divisor 인자가 '0'일 경우가 예외이다.
return으로 dividend 나누기 divisor 를 실행한다.

try문을 통해 divide(5, 0)를 실행하여 catch문에서 예외 클래스인 'Exception $e'를
인자로 받아 'Unable to divide.'를 출력한다.
그리고 finally문으로 예외 결과와 상관없이 'Process complete.'를 출력한다.

결과 :

Unable to divide. Process complete.

-> 예외가 발생하면 메시지를 표시한 다음 프로세스 종료

'catch'문 없을 때 :

<?php
function divide($dividend, $divisor) {
  if($divisor == 0) {
    throw new Exception("Division by zero");
  }
  return $dividend / $divisor;
}

try {
  echo divide(5, 0);
} finally {
  echo "Process complete.";
}
?>

결과 :

Process complete.

-> 예외가 포착되지 않은 경우에도 문자열을 출력한다.

출처 :
w3schools(https://www.w3schools.com/php/php_exceptions.asp)
tcpschool(http://www.tcpschool.com/php/php_exception_handling)

profile
항해중

0개의 댓글