PHP中断言函数的使用详解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PHP中断⾔函数的使⽤详解
⽬录
assert() 断⾔函数
assert_options() 及相对应的 php.ini 中的参数配置
总结
原来⼀直以为断⾔相关的函数是 PHPUnit 这些单元测试组件提供的,在阅读⼿册后才发现,这个 assert() 断⾔函数是 PHP 本⾝就⾃带的⼀个函数。
也就是说,我们在代码中进⾏简单的测试的时候是不需要完全引⼊整个单元测试组件的。
assert() 断⾔函数
assert(1==1);
assert(1==2);
// assert.exception = 0 时,Warning: assert(): assert(1 == 2)
// assert.exception = 1 时,Fatal error: Uncaught AssertionError: 验证不通过
很明显,第⼆段代码⽆法通过断⾔验证。
这时,PHP 就会返回⼀个警告或者异常错误。
为什么有可能是两种错误形式呢?当我们设置 php.ini 中的 assert.exception 为 off 或者 0 时,也就是关闭这个参数的能⼒时,程序就会以 PHP5 的形式依然返回⼀个警告,就像上⾯代码中的注释⼀样。
同时,通过 try...catch 也⽆法进⾏异常的捕获了。
这个参数其实就是控制是否以正宗的异常对象进⾏抛出。
如果保持这个参数为默认情况也就是设置为 on 或者 1 的话,就会直接抛出异常,程序中⽌。
从上述代码可以看出,断⾔的第⼀个参数是⼀个表达式,⽽且是需要⼀个返回 bool 类型对象的表达式。
如果我们传递的是⼀个字符串或者⼀个数字呢?
// 设置 assert.exception = 0 进⾏多条测试
assert(" ");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion " " failed
assert("1");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
assert(0);
// Warning: assert(): assert(0) failed
assert(1);
assert("1==2");
// Deprecated: assert(): Calling assert() with a string argument is deprecated
// Warning: assert(): Assertion "1==2" failed
很明显第⼀个参数的表达式会进⾏类型强制转换,但是字符串类型会多出⼀个过时提醒,表明给 assert() 函数传递字符串类型的表达式类型已经过时了。
当前的测试版本是 7.3 ,在将来可能就会直接报中⽌运⾏的错误或异常了。
主要问题在于,如果传递的字符串本⾝也是⼀个表达式的话,会以这个表达式的内容为基础进⾏判断,这样很容易产⽣歧义,就像最后⼀段代码⼀样。
当然,已经过时的使⽤⽅式还是不推荐的,这⾥仅是做⼀个了解即可。
接下来我们看⼀下 assert() 函数的其他参数,它的第⼆个参数是两种类型,要么给⼀个字符串⽤来定义错误的信息,要么给⼀个异常类⽤于抛出异常。
assert(1==1, "验证不通过");
assert(1==2, "验证不通过");
// Warning: assert(): 验证不通过 failed
如果直接给的⼀个字符串,那么在警告的提⽰信息中,显⽰的就是我们定义的这个错误信息的内容。
这个⾮常好理解。
// 注意 assert.exception 设置不同的区别
assert(1==1, new Exception("验证不通过"));
assert(1==2, new Exception("验证不通过"));
// assert.exception = 1 时,Fatal error: Uncaught Exception: 验证不通过
// assert.exception = 0 时,Warning: assert(): Exception: 验证不通过
当然,我们也可以给⼀个异常类让断⾔抛出⼀个异常。
在默认情况下,这个异常的抛出将中⽌程序的运⾏。
也就是⼀个正常
的异常抛出流程,我们可以使⽤ try...catch 进⾏异常的捕获。
try{
assert(1==2, new Exception("验证不通过"));
}catch(Exception $e){
echo "验证失败!:", $e->getMessage(), PHP_EOL;
}
// 验证失败!:验证不通过
另外还有⼀个参数会对断⾔的整体运⾏产⽣影响,那就是 php.ini 中的 zend.assertions 参数。
它包含三个值:
1,⽣成并执⾏代码,⼀般在测试环境使⽤
0,⽣成代码但是在运⾏时会路过
-1,不⽣成代码,⼀般在正式环境使⽤
这个参数⼤家可以⾃⾏配置测试,默认的 php.ini 中它的默认值是 1 ,也就是正常的执⾏ assert() 函数。
assert_options() 及相对应的 php.ini 中的参数配置
PHP 中的断⾔功能还为我们提供了⼀个 assert_options() 函数,⽤于⽅便地设置和获取⼀些和断⾔能⼒有关的参数配置。
它能够设置的断⾔标志包括:
标志 | INI设置 | 默认值 | 描述
| :-: | :-: | -:
ASSERT_ACTIVE | assert.active | 1 | 启⽤ assert() 断⾔ ASSERT_WARNING | assert.warning | 1 | 为每个失败的断⾔产⽣⼀个 PHP 警告(warning) ASSERT_BAIL | assert.bail | 0 | 在断⾔失败时中⽌执⾏ ASSERT_QUIET_EVAL |
assert.quiet_eval | 0 | 在断⾔表达式求值时禁⽤ error_reporting ASSERT_CALLBACK | assert.callback | (NULL) | 断⾔失败时调⽤回调函数
这些参数的含义都⾮常好理解,⼤家可以⾃⼰测试⼀下。
我们就来看⼀下最后⼀个 ASSERT_CALLBACK 的作⽤。
其实它的说明也⾮常清楚,就是断⾔失败的情况下就进⼊到这个选项定义的回调函数中。
assert_options(ASSERT_ACTIVE, 1);
assert_options(ASSERT_WARNING, 1);
assert_options(ASSERT_BAIL, 1);
assert_options(ASSERT_CALLBACK, function($params){
echo "====faild====", PHP_EOL;
var_dump($params);
echo "====faild====", PHP_EOL;
});
assert(1!=1);
// ====faild====
// string(105) ".../source/⼀起学习PHP中断⾔函数的使⽤.php"
// ====faild====
当断⾔失败的时候,我们就进⼊了回调函数中,在回调函数直接简单的打印了传给回调函数的参数内容。
可以看出,这个回调函数⾥⾯传递过来的是⽆法通过断⾔的⽂件信息。
总结
学习掌握⼀下断⾔函数的使⽤及配置,可以为我们将来学习 PHPUnit 单元测试打下基础,当然,本⾝这个能⼒的东西就不是很多,⼤家记住就好啦!
测试代码:
以上就是PHP中断⾔函数的使⽤详解的详细内容,更多关于PHP中断⾔函数的使⽤的资料请关注其它相关⽂章!。