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 |
|
assert.exception | 0 |
|
매개변수
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.active 및 zend.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
기타
- assert_options() - 다양한 assert 플래그를 설정/가져옵니다.