assert 检查一个断言是否为 false
发表日期:2021-07-01 08:55:06 | 来源: | | 浏览(834) 分类:PHP 选项/信息 函数
assert
(PHP 4, PHP 5, PHP 7, PHP 8)
assert — 检查一个断言是否为 false
说明
PHP 5
assert(mixed $assertion
, string $description
= ?): bool
PHP 7
assert(mixed $assertion
, Throwable $exception
= ?): bool
assert() 会检查指定的 assertion
并在结果为 false
时采取适当的行动。
Traditional assertions (PHP 5 and 7)
如果 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()。
Expectations (PHP 7 only)
assert() is a language construct in PHP 7, allowing for the definition of expectations: assertions that take effect in development and testing environments, but are optimised away to have zero cost in production.
While assert_options() can still be used to control behaviour as described above for backward compatibility reasons, PHP 7 only code should use the two new configuration directives to control the behaviour of assert() and not callassert_options().
Directive | Default value | Possible values |
---|---|---|
zend.assertions | 1 |
|
assert.exception | 0 |
|
参数
assertion
断言。In PHP 5, this must be either a string to be evaluated or a boolean to be tested. In PHP 7, this may also be any expression that returns a value, which will be executed and the result used to indicate whether the assertion succeeded or failed.
description
如果
assertion
失败了,选项 description 将会包括在失败信息里。exception
In PHP 7, the second parameter can be a Throwable object instead of a descriptive string, in which case this is the object that will be thrown if the assertion fails and the assert.exception configuration directive is enabled.
返回值
assertion 是 false 则返回 false
,否则是 true
。
更新日志
版本 | 说明 |
---|---|
7.0.0 | assert() is now a language construct and not a
function. assertion() can now be an expression.
The second parameter is now interpreted either as anexception (if aThrowable object is given), or as thedescription supported from PHP 5.4.8 onwards. |
5.4.8 | 增加了参数 description 。description 现在也作为第四个参数提供给 ASSERT_CALLBACK 模式里的回调函数。 |
范例
Traditional assertions (PHP 5 and 7)
示例 #1 使用自定义处理程序处理失败的断言
<?php // 激活断言,并设置它为 quietassert_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('mysql_query("")'); ?>
示例 #2 使用自定义处理器打印描述信息
<?php // 激活断言,并设置它为 quietassert_options(ASSERT_ACTIVE, 1); assert_options(ASSERT_WARNING, 0); assert_options(ASSERT_QUIET_EVAL, 1); //创建处理函数 function my_assert_handler($file, $line, $code, $desc = null){ echo "Assertion failed at $file:$line: $code"; if ($desc) { echo ": $desc"; } echo "\n"; } // 设置回调函数assert_options(ASSERT_CALLBACK, 'my_assert_handler'); // Make an assertion that should failassert('2 < 1'); assert('2 < 1', 'Two is less than one'); ?>
以上例程会输出:
Assertion failed at test.php:21: 2 < 1 Assertion failed at test.php:22: 2 < 1: Two is less than one
Expectations (PHP 7 only)
示例 #3 Expectations without a custom exception
<?php assert(true == false); echo 'Hi!'; ?>
With zend.assertions set to 0, the above example will output:
Hi!
With zend.assertions set to 1 and assert.exception set to 0, the above example will output:
Warning: assert(): assert(true == false) failed in - on line 2 Hi!
With zend.assertions set to 1 and assert.exception set to 1, the above example will output:
Fatal error: Uncaught AssertionError: assert(true == false) in -:2 Stack trace: #0 -(2): assert(false, 'assert(true == ...') #1 {main} thrown in - on line 2
示例 #4 Expectations with a custom exception
<?php class CustomError extends AssertionError { } assert(true == false, new CustomError('True is not false!')); echo 'Hi!'; ?>
With zend.assertions set to 0, the above example will output:
Hi!
With zend.assertions set to 1 and assert.exception set to 0, the above example will output:
Warning: assert(): CustomError: True is not false! in -:4 Stack trace: #0 {main} failed in - on line 4 Hi!
With zend.assertions set to 1 and assert.exception set to 1, the above example will output:
Fatal error: Uncaught CustomError: True is not false! in -:4 Stack trace: #0 {main} thrown in - on line 4
参见
assert_options() - 设置/获取断言的各种标志
- PHP(0)
- PHP杂项(34)
- PHP基础-李炎恢系列课程(20)
- 中文函数手册(0)
- 错误处理 函数(13)
- OPcache 函数(6)
- PHP 选项/信息 函数(54)
- assert_options 设置/获取断言的各种标志(0)
- assert 检查一个断言是否为 false(0)
- cli_get_process_title Returns the current process title(0)
- cli_set_process_title Sets the process title(0)
- dl 运行时载入一个 PHP 扩展(0)
- extension_loaded 检查一个扩展是否已经加载(0)
- gc_collect_cycles 强制收集所有现存的垃圾循环周期(0)
- gc_disable 停用循环引用收集器(0)
- gc_enable 激活循环引用收集器(0)
- gc_enabled 返回循环引用计数器的状态(0)
- gc_mem_caches Reclaims memory used by the Zend Engine memory manager(0)
- gc_status Gets information about the garbage collector(0)
- get_cfg_var 获取 PHP 配置选项的值(0)
- get_current_user 获取当前 PHP 脚本所有者名称(0)
- get_defined_constants 返回所有常量的关联数组,键是常量名,值是常量值(0)
- get_extension_funcs 返回模块函数名称的数组(0)
- get_include_path 获取当前的 include_path 配置选项(0)
- get_included_files 返回被 include 和 require 文件名的 array(0)
- get_loaded_extensions 返回所有编译并加载模块名的 array(0)
- get_magic_quotes_gpc 获取当前 magic_quotes_gpc 的配置选项设置(0)
- get_magic_quotes_runtime 获取当前 magic_quotes_runtime 配置选项的激活状态(0)
- get_required_files 别名 get_included_files()(0)
- get_resources Returns active resources(0)
- getenv 获取一个环境变量的值(0)
- getlastmod 获取页面最后修改的时间(0)
- getmygid 获取当前 PHP 脚本拥有者的 GID(0)
- getmyinode 获取当前脚本的索引节点(inode)(0)
- getmypid 获取 PHP 进程的 ID(0)
- getmyuid 获取 PHP 脚本所有者的 UID(0)
- getopt 从命令行参数列表中获取选项(0)
- getrusage 获取当前资源使用状况(0)
- ini_alter 别名 ini_set()(0)
- ini_get_all 获取所有配置选项(0)
- ini_get 获取一个配置选项的值(0)
- ini_restore 恢复配置选项的值(0)
- ini_set 为一个配置选项设置值(0)
- main 虚拟的main()(0)
- memory_get_peak_usage 返回分配给 PHP 内存的峰值(0)
- memory_get_usage 返回分配给 PHP 的内存量(0)
- php_ini_loaded_file 取得已加载的 php.ini 文件的路径(0)
- php_ini_scanned_files 返回从额外 ini 目录里解析的 .ini 文件列表(0)
- php_sapi_name 返回 web 服务器和 PHP 之间的接口类型(0)
- php_uname 返回运行 PHP 的系统的有关信息(0)
- phpcredits 打印 PHP 贡献者名单(0)
- phpinfo 输出关于 PHP 配置的信息(0)
- phpversion 获取当前的PHP版本(0)
- putenv 设置环境变量的值(0)
- restore_include_path 还原 include_path 配置选项的值(0)
- set_include_path 设置 include_path 配置选项(0)
- set_time_limit 设置脚本最大执行时间(0)
- sys_get_temp_dir 返回用于临时文件的目录(0)
- version_compare 对比两个「PHP 规范化」的版本数字字符串(0)
- zend_thread_id 返回当前线程的唯一识别符(0)
- zend_version 获取当前 Zend 引擎的版本(0)
- Zip 函数(10)
- Hash 函数(15)
- OpenSSL 函数(63)
- Date/Time 函数(51)
- 目录函数(9)
- Fileinfo 函数(6)
- iconv 函数(11)
- 文件系统函数(81)
- 多字节字符串 函数(57)
- GD 和图像处理 函数(114)
- 可交换图像信息(5)
- Math 函数(50)
- 程序执行函数(11)
- PCNTL 函数(23)
- JSON 函数(4)
- SPL 函数(15)
- URL 函数(10)
- cURL 函数(32)
- 网络 函数(33)
- FTP 函数(36)
- Session 函数(23)
- PCRE 函数(11)
- PCRE 正则语法(19)
- 数组 函数(81)
- 类/对象 函数(18)
- 函数处理 函数(13)
- 变量处理 函数(37)
- SimpleXML 函数(3)
- 杂项 函数(31)
- 字符串 函数(101)