catch块:它们能够捕获无效的arg类型吗?

背景:假设我有以下显然不正确的PHP:

    try{
        $vtest = '';
        print(array_pop($vtest));
    }catch(Exception $exx){}

为了使用array_pop,$ vtest显然应该是一个数组,而不是一个字符串。 不过,当我运行此代码时,会显示警告。 我不想那样,我只想让代码默默地失败。

问题:与其他语言相比,PHP try-catch有什么特别之处,导致它不起作用?

免责声明:仅供参考,确实有其他方法可以在PHP中处理这种情况,但这些都是不可取的。 这里的目标是避免:

“符号”技巧:

        $vtest = '';
        print(@array_pop($vtest)); // <-- would like to avoid this

铸造类型:

        $vtest = '';
        $vtest = (array)$vtest;  
        print(array_pop($vtest));

警告和通知在技术上不是PHP中的例外。 要捕获一个异常,必须明确抛出异常,并且很多内置的函数库不会抛出异常(主要是因为它们是在PHP支持的异常之前编写的)。

如果某些异常是在现有的通知/警告/错误框架的基础上构建的,但这可能会提出太多的要求,那将会很不错。


警告将始终由您提供的代码生成,但您可以使用set_error_handler来指示警告的处理方式; 即你可以导致它抛出一个异常。 此外,您可以使用restore_error_handler在完成时返回到缺省错误处理。

function errorHandler($errno, $errstr, $errfile, $errline) {
    throw new Exception($errstr, $errno);
}
set_error_handler('errorHandler');

当您将每个错误转换为异常时,您都可以捕获这些错误。 我建立了一个小错误处理环境。 只要测试它 - 它会起作用。

链接地址: http://www.djcxy.com/p/26605.html

上一篇: catch blocks: are they able to catch invalid arg types?

下一篇: Suppress error with @ operator in PHP