✔ 프로그램이 실행되는 도중 발생하는 예외를 처리를 알아보자
try
{
예외를 처리하길 원하는 실행 코드;
}
catch(예외객체 매개변수)
{
예외가 발생할 경우에 실행될 코드;
}
finally
{
try 블록이 종료되면 무조건 실행될 코드;
}
try 블록 내부에서 예외가 발생하면, 예외를 던지(throw)고, 잡아(catch)서 처리하는 구조
catch와 finally은 선택적인 옵션으로 반드시 사용할 필요 없다.
PHP에서 throw 키워드를 사용하여 예외를 던질 수 있다.
throw 예외객체;
✔ 예외 객체는 반드시 Exception 클래스나 Exception 클래스를 상속받은 자식 클래스
'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)