[解決済み] PHPでtry...catchブロックを効率的に使用する方法
質問
PHPのコードでtry..catchブロックを使用していますが、正しく使用できているかどうかわかりません。
例えば、私のコードの一部は以下のようになります。
try {
$tableAresults = $dbHandler->doSomethingWithTableA();
$tableBresults = $dbHandler->doSomethingElseWithTableB();
} catch (Exception $e) {
return $e;
}
複数のデータベース操作を同じtry/catchブロックにまとめているのは、いずれかのトランザクションで例外が発生した場合に、それを処理できるようにするためです。
よりも可読性が高く効率的だと思うので、そのようにしているのです。
try {
$tableAresults = $dbHandler->doSomethingWithTableA();
} catch (Exception $e) {
return $e;
}
try {
$tableBresults = $dbHandler->doSomethingWithTableB();
} catch (Exception $e) {
return $e;
}
とはいえ、私がやっていることが良い習慣なのか、それとも例外をキャッチするための怠惰な方法なのかは分かりませんが。
私の仮定では、例外が特別な処理を必要とする場合のみ、それ自身のトライ/キャッチブロックが必要で、それ以外は同じトライ/キャッチでそれらをグループ化しても問題ないはずです。
そこで私の質問です。
データベーストランザクションごとにtry/catchブロックを使用する利点はありますか? それとも、同じtry/catchブロックで複数のデータベーストランザクションをグループ化しても、まったく問題ないでしょうか?
try/catch ブロックのネストは大丈夫でしょうか? ありがとうございます。
EDIT
return文は主にデモンストレーションのためだけでしたが、returnを使った
catch()
を使用していますが、これはそのメソッドに AJAX リクエストを行い、Javascript が JSON オブジェクトを期待しているためで、例外が発生した場合は、空の JSON エンコード配列を返します。私の例では、特定のコードを置くことに何の価値もないだろうと思っただけです。
どのように解決するのですか?
重要なお知らせ
以下の議論は、上記の例のように構造化されたコードについて話していることを前提としています。どちらの選択肢を選んだとしても、例外が発生すると、メソッドは論理的にそれが途中であったとしても停止します。
のどのステートメントを使っても同じことをするつもりである限りは、例外は発生しません。
try
ブロックのどの文が例外を投げても同じことをするつもりであれば、確かに単一の
try
/
catch
. 例えば
function createCar()
{
try {
install_engine();
install_brakes();
} catch (Exception $e) {
die("I could not create a car");
}
}
複数
try
/
catch
ブロックは、失敗を正確に引き起こしたものに特化した方法で処理することができ、またそのつもりである場合に便利です。
function makeCocktail()
{
try {
pour_ingredients();
stir();
} catch (Exception $e) {
die("I could not make you a cocktail");
}
try {
put_decorative_umbrella();
} catch (Exception $e) {
echo "We 're out of umbrellas, but the drink itself is fine"
}
}
関連
-
[解決済み】子テーマのCSSが親テーマをオーバーライドしない
-
[解決済み] PHPの配列を別の配列にコピーする関数はありますか?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] PHPでHTML/XMLをパースして処理する方法とは?
-
[解決済み] Try-catchは私のコードをスピードアップさせるか?
-
[解決済み] なぜすべてのブロックを "try"-"catch "で包んではいけないのですか?
-
[解決済み】PHPの'foreach'は実際どのように動作するのですか?
-
[解決済み】C#で例外をキャッチして再スローする理由とは?
-
[解決済み】例外をスローしない場合、try/catchブロックはパフォーマンスを低下させるか?
-
[解決済み】再試行キャッチはどのように実装するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】PHP - 構文エラー、予期しないT_CONSTANT_ECAPSED_STRING [閉店].
-
[解決済み】Fatal error: 未定義の関数 sqlsrv_connect() を呼び出した。
-
[解決済み】PHP 7.2 - Warning: count(): パラメータは配列かCountableを実装したオブジェクトでなければならない [解決済み]
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】Phpのincludeが機能しない? 関数がincludeされない
-
[解決済み】警告:mysql_fetch_array()はパラメータ1がリソースであることを期待、ブール値は[重複]で与えられる]
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み] [Solved] Fatal error: メンバ関数 query() の null への呼び出し。
-
[解決済み] 致命的なエラーです。mysqli_result 型のオブジェクトを使用できません [終了] 。
-
[解決済み] 例外をキャッチして再スローするためのベストプラクティスは何ですか?