PHP assert 选项函数



  • 定义和用法

    assert - 检查一个断言是否为 FALSE
  • 版本支持

    PHP4 PHP5 PHP7
    支持 支持 支持
    7.0.0 assert() 现在是一种语言构造,而不是一个函数。 assertion() 现在可以是一个表达式。 现在,将第二个参数解释为异常(如果给出了Throwable对象),或者解释为PHP 5.4.8及更高版本所支持的描述。
    5.4.8 增加了参数 description。 description 现在也作为第四个参数提供给 ASSERT_CALLBACK 模式里的回调函数。
  • 语法

    PHP5:
    assert( mixed $assertion [, string $description ] )
    
    PHP7:
    assert( mixed $assertion [, Throwable $exception ] )
    
    assert() 会检查指定的 assertion 并在结果为 FALSE 时采取适当的行动。
    如果 assertion 是字符串,它将会被 assert() 当做 PHP 代码来执行。 assertion 是字符串的优势是当禁用断言时它的开销会更小,并且在断言失败时消息会包含 assertion 表达式。 这意味着如果你传入了 boolean 的条件作为 assertion,这个条件将不会显示为断言函数的参数;在调用你定义的 assert_options() 处理函数时,条件会转换为字符串,而布尔值 FALSE 会被转换成空字符串。断言这个功能应该只被用来调试。 你应该用于完整性检查时测试条件是否始终应该为 TRUE,来指示某些程序错误,或者检查具体功能的存在(类似扩展函数或特定的系统限制和功能)。断言不应该用于普通运行时操作,类似输入参数的检查。 作为一个经验法则,在断言禁用时你的代码也应该能够正确地运行。assert() 的行为可以通过 assert_options() 来配置,或者手册页面上描述的 .ini 设置。 assert_options() ASSERT_CALLBACK 配置指令允许设置回调函数来处理失败的断言。assert() 回调函数在构建自动测试套件的时候尤其有用,因为它们允许你简易地捕获传入断言的代码,并包含断言的位置信息。 当信息能够被其他方法捕获,使用断言可以让它更快更方便!回调函数应该接受三个参数。 第一个参数包括了断言失败所在的文件。 第二个参数包含了断言失败所在的行号,第三个参数包含了失败的表达式(如有任意 — 字面值例如 1 或者 "two" 将不会传递到这个参数)。 PHP 5.4.8 及更高版本的用户也可以提供第四个可选参数,如果设置了,用于将 description 指定到 assert()
    assert() 是PHP 7中的一种语言构造,允许定义期望:声明在开发和测试环境中有效,但经过优化以降低生产成本。 尽管 assert_options()仍可以如上所述用于控制行为,以实现向后兼容性,但是仅PHP 7的代码应使用两个新的配置指令来控制assert() 的行为,而不应调用assert_options()
    指令 默认值 可能值
    zend.assertions 1
    • 1: 生成并执行代码(开发模式)
    • 0: 生成代码,但在运行时跳转
    • -1: 不生成代码(生产模式)
    assert.exception 0
    • 1: 断言失败时引发,或者通过引发作为异常提供的对象,或者在未提供异常的情况下引发新的AssertionError对象
    • 0: 使用或生成如上所述的Throwable,但仅基于该对象生成警告,而不是将其抛出(与PHP 5行为兼容)
  • 参数

    参数 必需的 描述
    assertion 断言。在PHP 5中,它必须是要评估的字符串或要测试的布尔值。 在PHP 7中,这也可以是任何返回值的表达式,该表达式将被执行并将结果用于指示断言是成功还是失败。
    description 如果 assertion 失败了,选项 description 将会包括在失败信息里。
    exception 在PHP 7中,第二个参数可以是Throwable对象,而不是描述性字符串,在这种情况下,这是断言失败并且启用assert.exception配置指令时将抛出的对象。
  • 返回值

    assertion 是 false 则返回 FALSE,否则是 TRUE。
  • 示例

    // 激活断言,并设置它为 quiet
    assert_options(ASSERT_ACTIVE, 1);
    assert_options(ASSERT_WARNING, 0);
    assert_options(ASSERT_QUIET_EVAL, 1);
    
    //创建处理函数
    function my_assert_handler($file, $line, $code)
    {
            echo "<hr>Assertion Failed:
            File '$file'<br />
            Line '$line'<br />
            Code '$code'<br /><hr />";
    }
    
    // 设置回调函数
    assert_options(ASSERT_CALLBACK, 'my_assert_handler');
    
    // 让一则断言失败
    assert('mysqli_query("")');
    
  • 相关页面

    assert_options() - 设置/获取断言的各种标志