我需要捕捉一些警告从一些php本机函数抛出,然后处理它们。
具体地说:
array dns_get_record ( string $hostname [, int $type= DNS_ANY [, array &$authns [, array &$addtl ]]] )
当DNS查询失败时,它抛出一个警告。
Try /catch不起作用,因为警告不是异常。
我现在有两个选择:
set_error_handler似乎是多余的,因为我必须使用它来过滤页面中的每个警告(这是真的吗?);
调整错误报告/显示,这样这些警告就不会显示在屏幕上,然后检查返回值;如果为假,则没有找到主机名的记录。
这里的最佳实践是什么?
小心使用@操作符——虽然它抑制了警告,但也抑制了致命错误。我花了很多时间调试系统中的一个问题,其中有人写了@mysql_query('…’),问题是mysql支持没有加载到PHP中,它抛出了一个无声的致命错误。它对于PHP核心的一部分是安全的,但请谨慎使用。
bob@mypc:~$ php -a
Interactive shell
php > echo @something(); // this will just silently die...
没有进一步的输出-祝你调试好运!
bob@mypc:~$ php -a
Interactive shell
php > echo something(); // lets try it again but don't suppress the error
PHP Fatal error: Call to undefined function something() in php shell code on line 1
PHP Stack trace:
PHP 1. {main}() php shell code:0
bob@mypc:~$
这次我们可以看到为什么它失败了。