在一些 PHP 内置函数(例如 mkdir )中,在前面添加 @可以屏蔽该函数抛出的错误
那么自定义函数要如何实现这点呢?
我试了下throw new Exception和trigger_error都无法被 @屏蔽
1
halfcoder 2016 年 9 月 16 日
我记得 @ 好像实际就是在函数调用调整错误级别吧
|
2
cxbig 2016 年 9 月 16 日
PHP 里 Exception 和其他的 Fatal error 这类不是一个概念。
一个好的设计是善用 Exception 做异常处理,而不是简单的用 @掩盖。 |
3
msxcms 2016 年 9 月 16 日
不要这么处理错误
|
4
lslqtz 2016 年 9 月 16 日
|
5
lslqtz 2016 年 9 月 16 日
|
6
lslqtz 2016 年 9 月 16 日
<?php
function asd() { trigger_error('1',E_USER_ERROR); } @asd(); ?> C:\Users\lslqtz>php -f D:\***\1.php C:\Users\lslqtz> |
8
mokeyjay OP |
9
AbrahamGreyson 2016 年 9 月 17 日
永远不要用 @
|
10
halfcoder 2016 年 9 月 17 日
@mokeyjay 根据 PHP 官方文档, @ 符号作用于一个表达式上,用于抑制表达式计算过程中发生错误的消息显示,但是并不会阻止通过 set_error_handler() 设置的自定义错误处理函数的触发。其实际作用类似于在执行该表达式前先通过 error_reporting() 将错误报告级别设为 0 (关闭错误显示),执行完表达式后再恢复原有错误报告级别。
参见: http://php.net/manual/en/language.operators.errorcontrol.php http://php.net/manual/en/language.operators.errorcontrol.php#85042 |