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に対してのみ機能し、エラーの解析は機能しません。このようなエラーを回避する方法があることを確認するためにテストする必要があります(nullポインターと呼ばれることもありますが、正確ではありません)。$xmlattributes

于 2012-04-25T21:26:38.260 に答える