在一些 PHP 内置函数(例如 mkdir )中,在前面添加 @可以屏蔽该函数抛出的错误
那么自定义函数要如何实现这点呢?
我试了下throw new Exception和trigger_error都无法被 @屏蔽
1
halfcoder Sep 16, 2016
我记得 @ 好像实际就是在函数调用调整错误级别吧
|
2
cxbig Sep 16, 2016
PHP 里 Exception 和其他的 Fatal error 这类不是一个概念。
一个好的设计是善用 Exception 做异常处理,而不是简单的用 @掩盖。 |
3
msxcms Sep 16, 2016
不要这么处理错误
|
4
lslqtz Sep 16, 2016
|
5
lslqtz Sep 16, 2016
|
6
lslqtz Sep 16, 2016
<?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 Sep 17, 2016
永远不要用 @
|
10
halfcoder Sep 17, 2016
@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 |