PHP7的期望是如何使用的?

2019-05-13 14:57 更新

PHP7 中期望是对以往的 assert()函数的向后兼容增强。assert()现在是一个语言结构,它允许对期望的定义: 在开发和测试环境中生效的断言,但在生产代码中允许优化,以实现零成本断言,因此,期望在生产代码中抛出作为异常提供的对象允许零成本断言,并提供在断言失败时抛出自定义异常的能力。assert()中的第一个参数是一个表达式,而不是要测试的字符串或布尔值。

assert()参数

  • assertion - 断言。在 PHP5 中,这必须是要计算的字符串或者要测试的布尔值。在 PHP7中,这也可以是返回一个值的任何表达式,它将被执行,结果用于指示断言是成功还是失败。
  • description -(可选的说明)如果断言失败,将包含失败消息。
  • exception - 在 PHP7 中,第二个参数可以是一个 Throwable 对象,而不是一个描述性的字符串,在这种情况下,如果断言失败,并且启用了assert.exception 配置指令,则这个对象将被抛出。

assert()配置指令

指示 默认值 可能的值
zend.assertions 1

1 - 生成并执行代码(开发模式)

0 - 生成代码,但在运行时跳过它

-1 - 不生成代码(生产模式)

assert.exception 0

1 - 当断言失败时,抛出提供的异常作为异常,或者在未提供异常的情况下抛出新的 AssertionError 对象。

0 - 如上所述使用或生成 Throwable,但只生成基于该对象的警告,而不是抛出它(与 PHP5 行为兼容)

assert()返回值:

如果断言是假的,则返回 FALSE,否则返回 TRUE。ini_set('assert.exception', 1);

使用示例一:

<?php
   ini_set('assert.exception', 1);
   class CustomError extends AssertionError {}
   assert(false, new CustomError('Custom Error Message!'));
?>

它产生以下浏览器输出:

Fatal error: Uncaught CustomError: Custom Error Message! in...

使用示例二:

<?php
ini_set('assert.exception',1);
class CustomError extends AssertionError {}
assert(true == false, new CustomError('True is not false!'));
echo 'Hi!';
?>

将 zend.assertions 设置为 0,上面的例子将输出:

Hi!

将 zend.assertions 设置为 1,将 assert.exception 设置为 0 时,上述示例将输出:

Warning: assert(): CustomError: True is not false! in -:4
Stack trace:
#0 {main} failed in - on line 4
Hi!

更新日志

PHP版本描述
7.2.0assertion 被废弃时使用字符串。当 assert.active 和 zend.assertions 都设置为 时,它会发出E_DEPRECATED通知。
7.0.0assert()现在是一个语言构造而不是一个函数。assertion现在可以是一个表达式。第二个参数现在被解释为 exception(如果给出 Throwable 对象),或者description从 PHP 5.4.8 起支持。
5.4.8添加了description参数。description现在也提供给ASSERT_CALLBACK模式下的回调函数作为第四个参数。
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号