为什么我在try-catch包装的PHP代码上抛出错误?

时间:2012-04-25 21:24:10

标签: php exception-handling error-handling

<?php

try {   
    $attrs = $xml->attributes();
    $code = $attrs['_Code'];
}
catch (Exception $e)  
{
    $code = '';
}

?>

得到我:

  

致命错误:在非对象上调用成员函数attributes()   第6行

为什么我在try-catch包装的代码上抛出错误?


注意: 可以通过使用以下代码来避免此错误。 (问题不在于避免错误,而是为什么它没有被捕获 - 我仍然认为我会分享无错误的代码)

if (is_object($xml) && method_exists($xml,'attributes')) {
    $attrs = $xml->attributes();
    $code = !empty($attrs['_Code'])?$attrs['_Code']:'';
 }
else {
    $code = '';
}

2 个答案:

答案 0 :(得分:1)

无法捕获PHP致命错误。我不知道你正在做什么的具体细节,但你必须找出一些其他方法来测试$xml->attributes()是否有用。

此外,吞下每一个错误并且不将其记录在任何地方都是不好的做法,因为当事情开始破坏时你将不知道为什么。

答案 1 :(得分:0)

try / catch仅适用于例外,而非解析错误。您必须进行测试以确保$xml具有attributes方法以避免此类错误(可以称为空指针,但不完全相同)。