assert
(PHP 4, PHP 5, PHP 7, PHP 8)
assert — Проверяет утверждение
Описание
Утверждения следует использовать только в качестве отладочной функции.
Один из вариантов их использования — проверка на вменяемость предварительных условий,
которые всегда должны быть true
и если они не выполняются,
это указывает на ошибки программирования.
Другой случай использования — убедиться в наличии определённых возможностей,
например, функций модуля или определённых ограничений и возможностей системы.
Поскольку утверждения могут быть настроены на отказ от них,
их не следует использовать для обычных операций во время выполнения,
таких как проверка входных параметров.
Как правило, код должен вести себя так, как ожидается, даже если проверка утверждений отключена.
Функция assert() проверяет, выполняется ли ожидание,
заданное в параметре assertion
.
Если нет, и в результате вернулось значение false
,
то функция assert() выполнит заданное конфигурацией действие.
Поведение конструкции assert() определяется следующими настройками INI:
Опции настройки конструкции assert
Имя |
По умолчанию |
Описание |
Список изменений |
zend.assertions |
1 |
-
1 : генерирует и выполняет код (режим разработки)
-
0 : генерирует код, но перепрыгивает через него во время выполнения
-
-1 : не генерирует код (рабочий режим)
|
|
assert.active |
true |
Если false , функция assert() не проверяет ожидание
и возвращает true , безоговорочно.
|
Директива устарела начиная с PHP 8.3.0.
|
assert.callback |
null |
Пользовательская функция, вызываемая при неудачной проверке утверждения.
Сигнатура функции должна соответствовать определению:
|
До PHP 8.0.0 сигнатура callback-функции должна соответствовать определению:
Директива устарела начиная с PHP 8.3.0.
|
assert.exception |
true |
Если true , выбрасывается исключение AssertionError,
при неудачной проверке утверждения.
|
Директива устарела начиная с PHP 8.3.0.
|
assert.bail |
false |
Если true , выполнение PHP-скрипта прервётся в случае неудачной проверки утверждении.
|
Директива устарела начиная с PHP 8.3.0.
|
assert.warning |
true |
Если true , в случае неудачной проверки утверждения
будет выдана ошибка уровня E_WARNING .
Эта INI-настройка неэффективна, если включена директива assert.exception.
|
Директива устарела начиная с PHP 8.3.0.
|
Список параметров
assertion
-
Любое выражение, которое возвращает значение, которое выполнит функция,
а результат использует, чтобы указать, удалась или не удалась проверка утверждения.
Внимание
До версии PHP 8.0.0, если утверждение assertion
было
строкой (string), утверждение интерпретировалось как PHP-код
и выполнялось функцией eval().
Эта строка передавалась в callback-функцию как третий аргумент.
Это поведение объявили УСТАРЕВШИМ в PHP 7.2.0 и УДАЛИЛИ в PHP 8.0.0.
description
-
Если описание description
— экземпляр
класса Throwable, исключение будет выброшено только тогда,
когда проверка утверждения assertion
не удастся.
Замечание:
Начиная с PHP 8.0.0 это делается до
вызова потенциально определённой callback-функции утверждения.
Замечание:
Начиная с PHP 8.0.0 объект (object) будет выброшен независимо от конфигурации параметра
assert.exception.
Замечание:
Начиная с PHP 8.0.0 параметр assert.bail
не имеет никакого эффекта в этом случае.
Если параметр description
— строка (string),
это сообщение будет использоваться в случае исключения или предупреждения.
Необязательное описание, которое функция включит в сообщение,
если проверка утверждения assertion
не удастся.
Если параметр description
опустили.
Во время компиляции создаётся описание по умолчанию,
равное исходному коду для вызова assert().
Возвращаемые значения
Функция assert() каждый раз возвращает true
,
если истинно хотя бы одно из следующих утверждений:
zend.assertions=0
zend.assertions=-1
assert.exception=1
assert.bail=1
- Объект пользовательского исключения передали в параметр
description
.
Если ни одно из условий не истинно, функция assert() вернёт true
,
если параметр assertion
истинен, иначе вернёт false
.
Примеры
Пример #1 Пример использования функции assert()
<?php
assert(1 > 2);
echo 'Привет!';
?>
Если утверждения включены (zend.assertions=1
),
то пример выше выведет:
Fatal error: Uncaught AssertionError: assert(1 > 2) in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'assert(1 > 2)')
#1 {main}
thrown in example.php on line 2
Если утверждения отключены (zend.assertions=0
or zend.assertions=-1
),
то пример выше выведет:
Пример #2 Пример пользовательского сообщения
<?php
assert(1 > 2, "Ожидается, что один больше двух");
echo 'Привет!';
?>
Если утверждения включены пример выше выведет:
Fatal error: Uncaught AssertionError: Ожидается, что один больше двух in example.php:2
Stack trace:
#0 example.php(2): assert(false, 'Expected one to...')
#1 {main}
thrown in example.php on line 2
Если утверждения выключены, то пример выше выведет:
Пример #3 Пример использования пользовательского класса исключения
<?php
class ArithmeticAssertionError extends AssertionError {}
assert(1 > 2, new ArithmeticAssertionError("Ожидается, что один больше двух"));
echo 'Hi!';
?>
Если утверждения включены, то пример выше выведет:
Fatal error: Uncaught ArithmeticAssertionError: Ожидается, что один больше двух in example.php:4
Stack trace:
#0 {main}
thrown in example.php on line 4
Если утверждения выключены, пример выше выведет: