assert

(PHP 4, PHP 5, PHP 7, PHP 8)

assert — assertion이 false인지 확인


설명

PHP 5 및 7

assert(mixed $assertion, string $description = ?): bool

PHP 7

assert(mixed $assertion, Throwable $exception = ?): bool

assert()는 주어진 assertion을 확인하고 결과가 false이면 적절한 조치를 취합니다.

Traditional assertions (PHP 5 및 7)

assertion이 문자열로 제공되면 assert()에 의해 PHP 코드로 평가됩니다. 부울 조건을 assertion으로 전달하면 이 조건은 assert_options()로 정의했을 수 있는 assertion 함수에 대한 매개변수로 표시되지 않습니다. 조건은 해당 핸들러 함수를 호출하기 전에 문자열로 변환되고 부울 false는 빈 문자열로 변환됩니다.

어설션은 디버깅 기능으로만 사용해야 합니다. 항상 true이어야 하는 조건을 테스트하고 그렇지 않은 경우 일부 프로그래밍 오류를 나타내는 온전성 검사에 사용하거나 확장 함수나 특정 시스템 제한 및 기능과 같은 특정 기능의 존재를 확인하는 데 사용할 수 있습니다.

어설션은 입력 매개변수 검사와 같은 일반적인 런타임 작업에 사용되어서는 안 됩니다. 어설션 검사가 활성화되지 않은 경우 경험적으로 코드는 항상 올바르게 작동할 수 있어야 합니다.

assert()의 동작은 assert_options() 또는 해당 함수 매뉴얼 페이지에 설명된 .ini-settings에 의해 구성될 수 있습니다.

assert_options() 함수 및/또는 ASSERT_CALLBACK 구성 지시문을 사용하면 실패한 assertion을 처리하도록 콜백 함수를 설정할 수 있습니다.

assert() 콜백은 어설션이 만들어진 위치에 대한 정보와 함께 어설션에 전달된 코드를 쉽게 캡처할 수 있도록 해주기 때문에 자동화된 테스트 스위트를 구축하는 데 특히 유용합니다. 이 정보는 다른 방법을 통해 캡처할 수 있지만 어설션을 사용하면 훨씬 빠르고 쉽게 얻을 수 있습니다!

콜백 함수는 세 개의 인수를 받아들여야 합니다. 첫 번째 인수에는 어설션이 실패한 파일이 포함됩니다. 두 번째 인수에는 어설션이 실패한 행이 포함되고 세 번째 인수에는 실패한 표현식이 포함됩니다(있는 경우 — 1 또는 "2"와 같은 리터럴 값은 전달되지 않습니다. 이 인수를 통해). PHP 5.4.8 이상 사용자는 또한 네 번째 선택적 인수를 제공할 수 있습니다. 이 인수는 설정되어 있는 경우 assert()에 제공된 description을 포함합니다.


Expectations (PHP 7만 해당)

assert()는 PHP 7의 언어 구조로, 기대치를 정의할 수 있습니다. assertion은 개발 및 테스트 환경에서 적용되지만 생산 비용이 0이 되도록 최적화되어 있습니다.

assert_options()는 이전 버전과의 호환성을 위해 위에서 설명한 대로 동작을 제어하는 ​​데 계속 사용할 수 있지만 PHP 7 전용 코드는 두 개의 새로운 구성 지시문을 사용하여 assert_options()를 호출하지 않고 assert()의 동작을 제어해야 합니다.

assert()에 대한 PHP 7 구성 지시문

Directive Default value Possible values
zend.assertions 1
  • 1: 코드 생성 및 실행(개발 모드)
  • 0: 코드를 생성하지만 런타임에 점프
  • -1: 코드를 생성하지 않음(프로덕션 모드)
assert.exception 0
  • 1: exception로 제공된 개체를 throw하거나 exception가 제공되지 않은 경우 새 AssertionError 개체를 throw하여 어설션이 실패할 때 throw합니다.
  • 0: 위에서 설명한 대로 Throwable을 사용하거나 생성하지만 객체를 던지지 않고 해당 객체를 기반으로 경고만 생성합니다(PHP 5 동작과 호환).

매개변수

assertion
assertion. PHP 5에서 이것은 평가할 문자열이거나 테스트할 부울이어야 합니다. PHP 7에서는 값을 반환하는 모든 표현식이 될 수 있으며, 값은 실행되고 결과는 assertion의 성공 여부를 나타내는 데 사용됩니다.

경고 문자열을 assertion으로 사용하는 것은 PHP 7.2부터 더 이상 사용되지 않습니다.

description

assertion이 실패하는 경우 실패 메시지에 포함될 선택적 설명입니다. PHP 7부터 설명이 제공되지 않으면 assert() 호출에 대한 소스 코드와 동일한 기본 설명이 제공됩니다.

exception

PHP 7에서 두 번째 매개변수는 설명 문자열 대신 throwable 객체가 될 수 있습니다. 이 경우 이 객체는 assertion이 실패하고 assert.exception 구성 지시문이 활성화된 경우 throw되는 객체입니다.


반환 값

assertion이 거짓이면 false, 그렇지 않으면 true.


변경 로그

Version Description
8.0.0 네임스페이스 내에서 assert()라는 함수를 선언하는 것은 더 이상 허용되지 않으며 E_COMPILE_ERROR를 발행합니다.
7.3.0 네임스페이스 내에서 assert()라는 함수를 선언하는 것은 더 이상 사용되지 않습니다. 이러한 선언은 이제 E_DEPRECATED를 내보냅니다.
7.2.0 assertion으로 문자열을 사용하는 것은 더 이상 사용되지 않습니다. 이제 assert.activezend.assertions가 모두 1로 설정되면 E_DEPRECATED 알림을 내보냅니다.
7.0.0 assert()는 이제 함수가 아닌 언어 구조입니다. assertion은 이제 표현식이 될 수 있습니다. 두 번째 매개변수는 이제 exception(Throwable 객체가 제공된 경우)로 해석되거나 PHP 5.4.8부터 지원되는 description으로 해석됩니다.

Examples

예제 #1 사용자 지정 핸들러로 실패한 assertion 처리

                  
<?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);

// Create a handler function
function my_assert_handler($file, $line, $code)
{
    echo "<hr>Assertion Failed:
        File '$file'<br />
        Line '$line'<br />
        Code '$code'<br /><hr />";
}

// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');

// Make an assertion that should fail
assert('mysql_query("")');
?>
                  
                

예제 #2 사용자 정의 핸들러를 사용하여 description 출력

                   
 <?php
// Active assert and make it quiet
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 0);
assert_options(ASSERT_QUIET_EVAL, 1);

// Create a handler function
function my_assert_handler($file, $line, $code, $desc = null)
{
    echo "Assertion failed at $file:$line: $code";
    if ($desc) {
        echo ": $desc";
    }
    echo "\n";
}

// Set up the callback
assert_options(ASSERT_CALLBACK, 'my_assert_handler');

// Make an assertion that should fail
assert('2 < 1');
assert('2 < 1', 'Two is less than one');
?>
                   
                 

위의 예는 다음을 출력합니다.

Assertion failed at test.php:21: 2 < 1
Assertion failed at test.php:22: 2 < 1: Two is less than one
                 

Expectations (PHP 7 전용)

예제 #3 Expectations without a custom exception

                    
<?php
assert(true == false);
echo 'Hi!';
?>
                    
                  

zend.assertions를 0으로 설정하면 위의 예가 다음과 같이 출력됩니다.

Hi!
                  

zend.assertions가 1로 설정되고 assert.exception이 0으로 설정되면 위의 예는 다음을 출력합니다.

Warning: assert(): assert(true == false) failed in - on line 2
Hi!
                  

zend.assertions가 1로 설정되고 assert.exception이 1으로 설정되면 위의 예는 다음을 출력합니다.

Fatal error: Uncaught AssertionError: assert(true == false) in -:2
Stack trace:
#0 -(2): assert(false, 'assert(true == ...')
#1 {main}
  thrown in - on line 2
                  

예제 #4 Expectations with a custom exception

                     
 <?php
 class CustomError extends AssertionError {}

 assert(true == false, new CustomError('True is not false!'));
 echo 'Hi!';
 ?>
                     
                   

zend.assertions를 0으로 설정하면 위의 예가 다음과 같이 출력됩니다.

Hi!
                   

zend.assertions가 1로 설정되고 assert.exception이 0으로 설정되면 위의 예는 다음을 출력합니다.

Warning: assert(): CustomError: True is not false! in -:4
Stack trace:
#0 {main} failed in - on line 4
Hi!
                   

zend.assertions가 1로 설정되고 assert.exception이 1으로 설정되면 위의 예는 다음을 출력합니다.

Fatal error: Uncaught CustomError: True is not false! in -:4
Stack trace:
#0 {main}
  thrown in - on line 4
                   

기타