为什么我们在 PHP 中使用 assert() 和 assert_options()?
我是使用PHP的新手,并且正在通过阅读 php.net 上的文档来学习它 - 目前是assert()的页面,以了解这些assert()和assert_options()函数,但它没有解释我们为什么使用它们以及这些函数用简单的词做什么。这些函数是什么,为什么我们在PHP中使用它们?
我是使用PHP的新手,并且正在通过阅读 php.net 上的文档来学习它 - 目前是assert()的页面,以了解这些assert()和assert_options()函数,但它没有解释我们为什么使用它们以及这些函数用简单的词做什么。这些函数是什么,为什么我们在PHP中使用它们?
Assert()
是一个聪明的函数,其工作方式与我们的 print 语句相同,但它们仅在某个条件不匹配时才有任何效果。从本质上讲,它被用来说“这个陈述必须是真的 - 如果不是,请告诉我”。请考虑以下示例:assert()
<?php
print "Stage 1\n";
assert(1 == 1);
print "Stage 2\n";
assert(1 == 2);
print "Stage 3\n";
?>
这里我们有两个 s,第一个调用断言 1 必须等于 1,第二个调用断言 1 必须等于 2。由于不可能重新定义像 1 和 2 这样的常量,因此第一个常量将始终计算为 true,第二个常量将始终计算为 false。下面是脚本的输出:assert()
assert()
阶段 1 阶段 2 警告:断言()
[http://www.php.net/function.assert]:在第 5 行的 /home/paul/sandbox/php/assert.php 中断言失败
第 3 阶段
请注意,第一个在输出中根本看不到,因为它的计算结果为 ,而第二个计算结果为 ,因此我们得到一个关于 .还要注意,我们在断言之后看到,因为脚本在失败后继续执行。只要断言的计算结果为 true,它们对脚本的运行没有影响,这意味着您可以插入它们以进行调试,而不必担心在完成调试后将其删除。assert()
true
assert()
false
warning
assertion failure
"Stage 3"
failure warning
如果您担心断言会减慢执行速度(尽管速度命中率很小,但仍然是一个有效的问题),则可以通过使用该函数或在php.ini文件中设置为Off来禁用执行。如果你想使用 ,它需要两个参数 - 要设置的选项和要将其设置为的值 - 并且有多种方法可以使assert()更强大。assert()
assert_options()
assert.active
assert_options()
请注意,所有这些选项都可以在您的文件中设置,以便它们始终有效 - 要更改的关键选项是 。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');
?>
编号: 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()
assert()
assert_options()
Assertions
应仅用作功能。您可以使用它们进行健全性检查,以测试应始终为 TRUE 的条件,如果不是,则指示某些编程错误,或者检查是否存在某些功能(如扩展功能或某些系统限制和功能)。debugging
Assertions
不应用于正常的运行时操作,如检查。根据经验,如果未激活断言检查,您的代码应始终能够正常工作。input parameter
assert()
assert_options()
.ini-settings
assert_options()
ASSERT_CALLBACK
assert()