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