私は、私が取り組んでいるプロジェクトでちょっと穴を開けました。私はこの大規模なプロジェクト(何千もの行数)を持っており、どこにでもMySQLのエラーがあります。私は今それらを掃除する過程にある。実行を停止せずに例外をスローしますか?
すべてのクエリが通過するこのデータベースクラスがあるので、SQLエラーが発生したときはいつでも例外をスローします。問題は、私は実行を停止することができないということです。それはいつものように続行しなければならず、例外をログに記録するので、一度に1つずつ修正して修正することができます。
set_exception_handler
が私の望むことを望んでいましたが、文書管理者はハンドラを呼び出した後に実行を停止すると具体的に言います。では、どうすればこの問題を回避できますか?
例外は現在の関数を停止することができますが、関数から抜けて、おそらくnullまたはfalseを返してから通常どおりに処理したいのですが、グローバル例外ハンドラを呼び出す必要があります。
を私が(SQLエラーがあるたびに)私のデータベースクラスから例外をスローします:明確にする
。私はこのエラーを記録し、SQLエラーを修正するか試行錯誤の中で問題のある行を折り返すまで、画面にメッセージを表示したい。私はそれが実行を中断させたくない。例外を投げるのではなく、私が単にerror_handler()
という関数を呼び出すと、私はそれをキャッチできません。私はすぐに(DBクラス内で)それを捕まえると、私はそれをスタックの下にさらに捕らえることができません(もし私がそれを再投げなければ、実行を中止する)。
あなたは既にした場合、その後
そして
は、同じ例外ハンドラは、まだ実際にスローされている他のすべての例外をキャッチするために使用することができますMySQLのエラーを例外に変換するコードを更新しました。例外をスローするのではなくエラーをログに記録するのはなぜですか? – pgraham@pgraham:ええ、それは良い質問です。その理由は、グローバル例外ハンドラに落とさないようにするために、例外を捕捉できるようにしたかったからです。さらに、集中処理された例外処理とログ機能が必要です。最後に、エラーを一掃したら、グローバル例外ハンドラを少し修正して、実際には*死ぬことになり、致命的なエラーが発生するようにしたい。 – mpen
@downvoter:これが悪い質問である理由を説明してください。 – mpen