Почему мы используем assert () и assert_options () в php?

Я новичок в использовании PHP и изучения его, читая документацию по php.net— в настоящее время страница для утверждают () знать о тех утверждают () а также assert_options () функции, но это не объясняет Зачем мы используем их и что эти функции делают простыми словами. Кто-нибудь может сказать, что делают эти функции и почему мы используем их в PHP?

6

Решение

Assert() это умная функция, которая работает в том же ключе, что и наши операторы печати, но они имеют какой-либо эффект, только если определенное условие не соответствует. По существу, assert() используется, чтобы сказать «Это утверждение должно быть правдой — если это не так, пожалуйста, скажите мне». Рассмотрим следующий пример:

<?php
print "Stage 1\n";
assert(1 == 1);
print "Stage 2\n";
assert(1 == 2);
print "Stage 3\n";
?>

Здесь у нас есть два assert()s, с первым вызовом, утверждающим, что один должен быть равен единице, и вторым вызовом, утверждающим, что один должен быть равен двум. Поскольку невозможно переопределить константы типа 1 и 2, первое assert() всегда будет оцениваться как true, а второй всегда будет оцениваться как false. Вот вывод из скрипта:

Стадия 1 Стадия 2 Предупреждение: assert ()

[http://www.php.net/function.assert]: Утверждение не удалось в
/home/paul/sandbox/php/assert.php в строке 5

Этап 3

Обратите внимание, что первый assert() вообще не виден в выводе, потому что оценивается trueтогда как второй assert() оценивается в falseтак что мы получаем warning о assertion failure, Также обратите внимание, что мы видим "Stage 3" после утверждения failure warningпотому что скрипт продолжает выполняться после сбоя. Пока утверждения верны, они не влияют на выполнение скрипта, что означает, что вы можете вставлять их в целях отладки и не беспокоиться об их удалении после завершения отладки.


Если вы беспокоитесь о том, что ваши утверждения могут замедлить выполнение, которое, хотя скорость попадания будет минимальной, по-прежнему вызывает озабоченность, вы можете отключить выполнение assert() используя assert_options() функция или путем установки assert.active Выкл в вашем файле php.ini. Если вы хотите использовать assert_options()Он принимает два параметра — параметр для установки и значение, которое вы хотите установить — и существует множество способов сделать assert () более мощным.
введите описание изображения здесь

Обратите внимание, что все эти параметры могут быть установлены в вашем php.ini файл, чтобы они всегда были в силе — ключевые параметры для изменения assert.active, assert.warning, assert.bail, assert.quiet_eval, and assert_callback,

ASSERT_CALLBACK Это очень полезная опция, так как она позволяет вам написать обработчик ошибок, когда ваш код не соответствует утверждению. Он принимает имя строки функции для выполнения в случае сбоя утверждений, а определенная вами функция должна принимать три параметра: один для хранения файла, в котором произошло утверждение, один для хранения строки и один для хранения выражения. Использование всех трех вместе в вашей функции обратного вызова позволяет генерировать значимые сообщения об ошибках, которые вы можете легко отладить. Рассмотрим этот фрагмент кода:

<?php
function assert_failed($file, $line, $expr) {
print "Assertion failed in $file on line $line: $expr\n";
}

assert_options (ASSERT_CALLBACK, 'assert_failed');
assert_options (ASSERT_WARNING, 0);

$foo = 10;
$bar = 11;
assert('$foo > $bar');
?>

Ref:
http://www.hackingwithphp.com/19/8/3/making-assertions


Пример из официальной документации

assert_options — Установить / получить различные флаги assert

Пример # 1 Пример использования assert_options ()

<?php
// This is our function to handle
// assert failures
function assert_failure()
{
echo 'Assert failed';
}

// This is our test function
function test_assert($parameter)
{
assert(is_bool($parameter));
}

// Set our assert options
assert_options(ASSERT_ACTIVE,   true);
assert_options(ASSERT_BAIL,     true);
assert_options(ASSERT_WARNING,  false);
assert_options(ASSERT_CALLBACK, 'assert_failure');

// Make an assert that would fail
test_assert(1);

// This is never reached due to ASSERT_BAIL
// being true
echo 'Never reached';
?>

Согласно документации PHP assert()

  1. Если утверждение задано в виде строки, оно будет оцениваться как код PHP assert(),
  2. Если вы передаете логическое условие как утверждение, это условие не будет отображаться как параметр для функции утверждения, которую вы, возможно, определили с помощью assert_options(). Условие преобразуется в строку перед вызовом этой функции-обработчика, а логическое значение FALSE преобразуется в пустую строку.
  3. Assertions следует использовать как debugging только функция Вы можете использовать их для проверок работоспособности, которые проверяют условия, которые всегда должны быть ИСТИНА, и которые указывают на некоторые ошибки программирования, если нет, или проверять наличие определенных функций, таких как функции расширения или определенные системные ограничения и функции.
  4. Assertions не должен использоваться для обычных операций во время выполнения, таких как input parameter чеки. Как правило, ваш код всегда должен работать правильно, если проверка утверждений не активирована.
  5. Поведение assert() может быть настроен assert_options() или .ini-settings описанный в той странице руководства функций. assert_options() функция и / или ASSERT_CALLBACK Директива конфигурации позволяет установить функцию обратного вызова для обработки ошибочных утверждений.
    6.assert() обратные вызовы особенно полезны для создания автоматизированных наборов тестов, поскольку они позволяют легко захватить код, переданный утверждению, вместе с информацией о том, где было сделано утверждение. Хотя эта информация может быть получена с помощью других методов, использование утверждений делает ее намного быстрее и проще!
8

Другие решения

assert() Функция — это хороший способ гарантировать выполнение определенных условий на протяжении всего жизненного цикла вашего кода. Цитировать Эта статья Пол Хадсон:

По сути, assert () используется, чтобы сказать: «Это утверждение должно быть правдой — если это не так, пожалуйста, скажите мне».

Чтобы включить обработку утверждений, используйте assert_options(ASSERT_ACTIVE), а также использовать assert_options() с другими аргументами для управления тем, что происходит при сбое утверждений (например, прекращение выполнения сценария PHP при сбое подтверждения, вызов функции-обработчика, которую можно использовать для отправки электронных писем, регистрации данных в файлах и / или таблицах базы данных и т. д.). Обратитесь к параметры раздел для списка всех вариантов и их результатов.

Попробуйте некоторые варианты в этот пример детской площадки.

Читать эта статья для получения дополнительной информации об обеих из этих функций.

4