Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP AssertionError(어설션 오류) 완벽 정리: assert() 사용법과 예외 처리

개요

AssertionError 클래스는 Error 클래스의 하위 클래스입니다. 이 오류는 assert() 함수가 FALSE를 반환할 때 발생하며, 코드 내에서 검증 조건이 충족되지 않았음을 의미합니다.

assert()는 주어진 어설션(assertion)이 참인지 거짓인지 검사하고, 거짓일 경우 AssertionError를 던집니다. assert() 함수는 다음과 같이 정의됩니다.

문법(Syntax)

PHP 5 및 PHP 7
assert ( mixed $assertion [, string $description ] ) : bool

PHP 7 전용
assert ( mixed $assertion [, Throwable $exception ] ) : bool

매개변수(Parameters)

번호매개변수 및 설명
1assertion
검사할 문자열 또는 불리언 표현식입니다.
2description
어설션이 실패했을 때 표시되는 실패 메시지입니다.
3exception (PHP 7 전용)
던질 수 있는(throwable) 예외 객체입니다.

PHP 7부터의 주요 변경 사항

PHP 7.0부터 assert()는 더 이상 일반 함수가 아니라 언어 구조(language construct)로 취급됩니다. 이에 따라 다음과 같은 변화가 있습니다.

  • assertion 매개변수에 표현식을 직접 사용할 수 있습니다.
  • 두 번째 매개변수로 예외 객체 또는 설명 문자열을 지정할 수 있습니다.
  • PHP 7.2부터는 문자열 형태의 description을 사용하면 E_DEPRECATED 경고 메시지가 발생합니다.

또한, assert()가 던진 AssertionError는 php.ini 설정 파일에서 assert.exception=on으로 활성화된 경우에만 catch 블록으로 전달됩니다. 이 설정이 꺼져 있으면 예외가 잡히지 않으므로 주의해야 합니다.

AssertionError 예제

다음 예제에서는 조건이 참이라고 어설션을 선언합니다. 조건이 참이면 try 블록이 정상적으로 실행되고, 거짓이면 catch 블록에서 AssertionError 메시지가 출력됩니다.

예제 코드

<?php
$a = 10;
$b = 20;
try {
    if (assert($a == $b, "assert($a == $b) failed.")) {
        echo("assert($a == $b) was successful.");
    }
} catch (AssertionError $e) {
    echo $e->getMessage();
}
?>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

assert(10 == 20) failed.

$a와 $b의 값이 서로 다르기 때문에 어설션이 실패하고, catch 블록에서 지정한 실패 메시지가 화면에 표시됩니다. 이처럼 assert()는 개발 단계에서 코드의 논리적 가정을 빠르게 검증하는 데 유용하게 활용할 수 있습니다.