2
<?php

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

?>

得到我:

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

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


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

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

2 回答 2

1

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

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

于 2012-04-25T21:26:11.413 回答
0

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

于 2012-04-25T21:26:38.260 回答