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

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

2 ответов


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/песочница/php / assert.php on line 5

Этап 3

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


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

обратите внимание, что все эти параметры могут быть установлены в вашей так что они всегда в силе - ключевые параметры для изменения находятся 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 - установить / получить различные утверждения флаги

Пример #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 описано на этой странице руководства по функциям.The assert_options() функции и/или ASSERT_CALLBACK директива конфигурации позволяет установить функцию обратного вызова для обработки неудачных утверждений. 6.assert() обратные вызовы особенно полезны для создания автоматизированных наборов тестов, поскольку они позволяют легко захватывать код передается в утверждение вместе с информацией о том, где было сделано утверждение. Хотя эта информация может быть захвачена с помощью других методов, использование утверждений делает это намного быстрее и проще!

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

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

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

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

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