5

PHP学習の過程で、エラーの報告と処理のベストプラクティスを読み上げようとしましたが、ステートメントは人によって異なり、アプリケーションのエラーを処理するための明確で簡潔な方法を思い付くのに苦労しました。私はうまくいかない可能性のあるものに例外を使用しますが、ほとんどの場合、例外がアプリケーションを強制終了してエラーページを表示するのか、それとも単にキャッチして黙って処理するのかを理解するのは難しいです。

私にはわかりにくいようですが、報告が多すぎるということはありませんか?関数を呼び出すたびに、何かがひどく間違ってしまう可能性があります。つまり、すべての関数呼び出しを確認する場合は、ページにifステートメントを入力し、1つの失敗が残りにどのような影響を与えるかを理解する必要があります。これを解決できる簡潔なドキュメントやエラー報告のアイデアはありますか?ベストプラクティスはありますか?優れたエラー処理の最良の例は何ですか?

現在、私は次のことを行っています。

  • 致命的なエラーが発生した場合にログに記録され、電子メールで送信される配列に重要なイベント結果を追加します
  • 致命的なエラーの抽象/一般的なエラーを表示します。
  • 失敗する可能性のあるケースには例外を使用する
  • 開発環境ではエラーレポートをオンにし、ライブ環境ではオフにします
  • すべてのユーザー入力データを検証します
  • 無効なユーザー入力のサニタイズ
  • 悪用のプラットフォームを提供せずに、簡潔で有益なエラーメッセージをユーザーに表示します。
4

1 に答える 1

3

IMHOを理解していないのは例外だけです。例外は制御不能であり、スローされたスコープの外部から処理されるようになっています。tryブロックには特定の制限があります。関連するアクションが含まれています。たとえば、データベースのtrycatchブロックを考えてみましょう。

$array = array();
try {
    // connect throws exception on fail
    // query throws exception on fail
    // fetch results into $array
} catch (...) {
    $array[0]['default'] = 'me';
    $array[0]['default2'] = ...;
    ...
}

ご覧のとおり、すべてのデータベース関連関数をtryブロック内に配置しています。接続がクエリに失敗し、接続がないと意味がないためにフェッチが実行されない場合。クエリが失敗した場合、結果をフェッチしても意味がないため、フェッチはスキップされます。そして、何か問題が発生した場合は、処理する空の$ arrayがあります。たとえば、デフォルトのデータを入力できます。

次のような例外を使用します。

$array = array();
try {
    if (!file_exists('file.php')) throw new Exception('file does not exists');
    include('file.php');
} catch (Exception $e) {
    trigger_error($e->getMessage());
}

意味がありません。これは、次の長いバージョンです。

if (!file_exists('file.php')) trigger_error('file does not exists');
    include('file.php');
于 2013-01-24T11:36:40.003 に答える