PHP错误控制运算符

2024-01-08 15:48 小编

PHP 支持一个错误控制运算符:@。当将其放置在一个 PHP 表达式之前,该表达式可能产生的任何错误诊断都被抑制。

如果用 set_error_handler() 设定了自定义的错误处理函数,即使诊断信息被抑制,也仍然会被调用,因此自定义错误处理函数应该调用 error_reporting(),并验证 @ 操作符是否按照如下方式使用:

<?php

function my_error_handler($err_no, $err_msg, $filename, $linenum) {

    if (!(error_reporting() & $err_no)) {

        return false; // 静默

    }

    // ...

}

?>

关于错误处理的更多内容,可以前往错误处理章节了解。

PHP 8.0.0 之前,如果诊断被抑制,则传递给自定义错误处理函数的严重性值则始终为 0 。 PHP 8.0.0 起,情况则不再如此。

error_get_last() 返回数组中的 "message" 元素储存了表达式产生的任意错误信息。 此函数的返回结果会随着每次错误的发生而相应变化,所以需要尽早检查。

<?php

/* 故意文件错误 */

$my_file = @file ('non_existent_file') or

    die ("Failed opening file: error was '" . error_get_last()['message'] . "'");

// 这适用于所有表达式,而不仅仅是函数:

$value = @$cache[$key];

// 如果索引 $key 不存在,则不会发出通知。

?>

 注意:运算符只对 表达式 有效。 对新手来说一个简单的规则就是:如果能从某处获得值,就能在它前面加上 运算符。例如,可以把它放在变量,函数调用,某些语言构造调用(例如 include )等等之前。 不能把它放在函数或类的定义之前,也不能用于条件结构例如 和 foreach 等。 @@if

PHP 8.0.0 之前,@ 运算符会禁用导致脚本停止运行的严重错误。 例如在调用一个不存在的函数前添加 @,由于函数不可用或者输入错误, 将会导致脚本终止,而不会说明原因。

在线咨询 拨打电话

电话

13363039260

内部绝密传真282期

微信二维码