Традиционная работа функции assert (PHP 5 и 7)
Если assertion
задаётся в виде строки, оно будет
рассматриваться функцией assert() как PHP-код.
Если вы передадите в качестве параметра assertion
логическое выражение, то это выражение не будет передано в качестве параметра
callback-функции, заданной с помощью assert_options().
Вместо этого callback-функция получит пустую строку.
Утверждения должны использоваться только в целях отладки. Их можно использовать
для тестирования каких-то условий, которые в штатных ситуациях всегда принимают
значение true
, обратное должно указывать на программные ошибки. Также их можно
использовать, чтобы удостовериться в наличии каких-либо модулей или системных
ограничений.
Утверждения не должны использоваться в обычных операциях, таких как проверка
входных параметров. Как правило, скрипт должен корректно выполняться, если отключить проверку
утверждений.
Поведение функции assert() можно изменять с помощью функции
assert_options() или установкой .ini-настроек.
Функция assert_options() и/или директива
ASSERT_CALLBACK
позволяют задать callback-функцию,
которая будет вызываться при провале проверки утверждения.
Возможность вызывать callback-функции из assert() может
быть полезна для создания автоматизированных тестовых пакетов. Посредством этих
функций можно извлекать код, переданный на проверку вместе с информацией о том,
где эта проверка была осуществлена. Подобную информацию можно получить и другими
методами, однако использование утверждений быстрей и проще.
Callback-функция должна принимать три аргумента. Первый аргумент должен содержать
файл, в котором утверждение не прошло проверку. Второй аргумент отвечает за
номер строки в этом файле. В третьем аргументе будет передаваться выражение,
содержащее ошибку (если таких несколько, строковые значение, вроде 1 или "два"
не будут передаваться через этот аргумент). Пользователи PHP версий 5.4.8 и
выше могут задать четвёртый необязательный аргумент
description
, который будет также передан в функцию
assert().
Ожидания (только PHP 7)
В PHP 7 assert() - это языковая конструкция, позволяющая
определять ожидания: утверждения, которые работают в среде разработки и тестирования,
но в целях оптимизации отключены на продуктовом окружении.
В то время как функция assert_options() может по-прежнему
быть использована для контроля над поведением программы описанным выше образом,
для обратной совместимости, но в PHP 7 код должен использовать две новые
конфигурационные директивы для управления поведением assert() и
не вызывать функцию assert_options().
Конфигурационные директивы PHP 7 для функции assert()
Директива |
Значение по умолчанию |
Возможные значения |
zend.assertions
|
1 |
-
1 : генерирует и выполняет код (режим разработки)
-
0 : генерирует код, но перепрыгивает через него во время выполнения
-
-1 : не генерирует код (рабочий режим)
|
assert.exception
|
0 |
-
1 : выбрасывает исключение, когда утверждение терпит неудачу,
класса, предоставленного в параметре exception , либо
класса AssertionError, если параметр exception не передан.
-
0 : использует или создаёт экземпляр класса
Throwable как описано выше, но только генерирует
предупреждение на основе этого объекта, не выбрасывая его
(для совместимости с поведением PHP 5)
|