오류 제어 연산자

PHP는 하나의 오류 제어 연산자인 at 기호(@)를 지원합니다. PHP에서 표현식 앞에 추가하면 해당 표현식에 의해 생성될 수 있는 진단 오류가 억제됩니다.

사용자 정의 오류 처리기 함수가 set_error_handler()로 설정된 경우 진단이 억제된 경우에도 여전히 호출됩니다. 따라서 사용자 정의 오류 처리기는 error_reporting()을 호출하고 @ 연산자가 다음과 같은 방식으로 사용되었는지 확인해야 합니다.

                  
<?php
function my_error_handler($err_no, $err_msg, $filename, $linenum) {
    if (!(error_reporting() & $err_no)) {
        return false; // Silenced
    }
    // ...
}
?>
                  
                

경고 PHP 8.0.0 이전에는 진단이 억제된 경우 사용자 정의 오류 처리기에 전달된 심각도 값이 항상 0이었습니다. PHP 8.0.0부터는 더 이상 그렇지 않습니다.

표현식에 의해 생성된 모든 오류 메시지는 error_get_last()에 의해 반환된 배열의 "message" 요소에서 사용할 수 있습니다. 해당 기능의 결과는 오류가 발생할 때마다 달라지므로 조기에 확인해야 합니다.

                  
<?php
/* Intentional file error */
$my_file = @file ('non_existent_file') or
    die ("Failed opening file: error was '" . error_get_last()['message'] . "'");

// this works for any expression, not just functions:
$value = @$cache[$key];
// will not issue a notice if the index $key doesn't exist.

?>
                  
                

참고: @-연산자는 표현식에서만 작동합니다. 간단한 경험 법칙은 다음과 같습니다. 무언가의 값을 취할 수 있다면 그 앞에 @ 연산자를 추가할 수 있습니다. 예를 들어, 변수, 함수 호출, 특정 언어 구성 호출(예: include) 등에 추가될 수 있습니다. 함수 또는 클래스 정의 또는 ifforeach 등과 같은 조건부 구조 앞에 추가할 수 없습니다.

경고 PHP 8.0.0 이전에는 @ 연산자가 스크립트 실행을 종료시키는 치명적인 오류를 비활성화할 수 있었습니다. 예를 들어 존재하지 않는 함수 호출 앞에 @를 추가하면 사용할 수 없거나 잘못 입력되어 이유에 대한 표시 없이 스크립트가 종료됩니다.

기타