소개
Throwable 인터페이스는 Error 및 Exception 클래스에 의해 구현됩니다. 미리 정의된 모든 Error 클래스는 Error 클래스에서 상속됩니다. 해당 Error 클래스의 인스턴스는 try 블록 내에서 던져지고 적절한 catch 블록 내에서 처리됩니다.
오류 발생
정상적인 실행(try 블록 내에서 예외가 발생하지 않은 경우)은 순서대로 정의된 마지막 catch 블록 이후에 계속됩니다.
예시
<?php function div($x, $y) { if (!$y) { throw new Exception('Division by zero.'); } return $x/$y; } try { echo div(10,5) . "\n"; echo div(10,0) . "\n"; } catch (Exception $e) { echo 'Caught exception: ', $e->getMessage(), "\n"; } // Continue execution echo "Execution continues\n"; ?>
출력
다음 출력이 표시됩니다.
2 Caught exception: Division by zero. Execution continues
다음 예에서 TypeError 적절한 인수가 전달되지 않았기 때문에 함수를 실행하는 동안 throw됩니다. 해당 오류 메시지가 표시됩니다.
예시
<?php function add(int $num1, int $num2){ return $num1 + $num2; } try { $value = add(1, 'one'); } catch (TypeError $e) { echo $e->getMessage(). "\n"; } ?>
출력
다음 출력이 표시됩니다.
Argument 2 passed to add() must be of the type integer, string given
SPL 예외
표준 PHP 라이브러리에는 사전 정의된 예외가 포함되어 있습니다.
LogicException | 프로그램 로직의 오류를 나타내는 예외입니다. |
BadFunctionCallException | 콜백이 정의되지 않은 함수를 참조하거나 일부 인수가 누락된 경우 예외가 발생합니다. |
BadMethodCallException | 콜백이 정의되지 않은 메서드를 참조하거나 일부 인수가 누락된 경우 예외가 발생합니다. |
도메인 예외 | 값이 정의된 유효한 데이터 도메인을 준수하지 않는 경우 예외가 발생합니다. |
InvalidArgumentException | 인수가 예상한 유형이 아닌 경우 예외가 발생합니다. |
길이 예외 | 길이가 유효하지 않은 경우 예외가 발생합니다. |
OutOfRangeException | 불법 색인이 요청되었을 때 예외가 발생했습니다. |
런타임 예외 | 런타임에서만 찾을 수 있는 오류가 발생하면 예외가 발생합니다. |
OutOfBoundsException | 값이 유효한 키가 아닌 경우 예외가 발생합니다. |
OverflowException | 전체 컨테이너에 요소를 추가할 때 예외가 발생했습니다. |
범위 예외 | 프로그램 실행 중 범위 오류를 나타내기 위해 예외가 발생했습니다. under/overflow 이외의 산술 오류입니다. |
UnderflowException | 요소 제거와 같이 빈 컨테이너에서 잘못된 작업을 수행하면 예외가 발생합니다. |
예기치 않은 값 예외 | 값이 값 집합과 일치하지 않으면 예외가 발생합니다. |
다음 예는 OutOfBoundsException을 보여줍니다. PHP 배열에서 키를 찾을 수 없을 때 발생
예시
<?php $arr=array("one"=>1, "two"=>2,"three"=>3,"four"=>4); $key="ten"; try{ if (array_key_exists($key, $arr)==FALSE){ throw new OutOfBoundsException("key not found");} else { echo $arr[$key];} } catch (OutOfBoundsException $e){ echo $e->getMessage(). "\n"; } ?>
출력
다음 출력이 표시됩니다.
key not found