[关闭]
@a5635268 2017-07-10T18:23:52.000000Z 字数 1590 阅读 2080

PHP断言(ASSERT)的用法

PHP


简述

编写代码时,我们总是会做出一些假设,断言就是用于在代码中捕捉这些假设,可以将断言看作是异常处理的一种高级形式。程序员断言在程序中的某个特定点该的表达式值为真。如果该表达式为假,就中断操作
可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言,而在部署时禁用断言。同样,程序投入运行后,最终用户在遇到问题时可以重新起用断言。
使用断言可以创建更稳定,品质更好且不易于出错的代码。单元测试必须使用断言!

PHP断言

  1. # PHP5
  2. bool assert ( mixed $assertion [, string $description ] )
  3. # PHP7
  4. bool assert ( mixed $assertion [, Throwable $exception ] )

example1:

  1. // 断言操作选项函数
  2. assert_options(ASSERT_ACTIVE, 1); // 默认是打开断言的
  3. assert('1==2'); // Warning: assert(): Assertion "1==2" failed in D:\wamp\www\XF9_Trunk_Website3.0\new\Public\index.php on line 3
  4. echo 555555555555; // 默认情况下继续执行,对于调试很好,尤其是可以使用callback,但是生产环境就不建议使用了。

assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动(视assert_options而定)。

assert_options

  1. // Active assert and make it quiet
  2. assert_options(ASSERT_ACTIVE, 1);
  3. assert_options(ASSERT_WARNING, 0);
  4. assert_options(ASSERT_QUIET_EVAL, 1);
  5. // Create a handler function
  6. function my_assert_handler($file, $line, $code)
  7. {
  8. echo "<hr>Assertion Failed:File '$file'<br />Line '$line'<br />Code '$code'<br /><hr />";
  9. }
  10. // Set up the callback
  11. assert_options(ASSERT_CALLBACK, 'my_assert_handler');
  12. // Make an assertion that should fail
  13. assert('mysql_query("")');

安全性

  1. function fo(){
  2. file_put_contents('a.php','www.bo56.com');
  3. return true;
  4. }
  5. $func = $_GET["func"];
  6. assert("$func()");

如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。跟eval()类似, 不过eval($assertion)只是执行符合php编码规范的$code_str。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注