语法
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行为兼容)
|