1

短期間以来、私は PHP で Try Catch を使用しています。現在、新しいエラーがスローされるたびに画面に致命的なエラーが表示されますが、これはユーザーフレンドリーではないため、致命的なエラーの代わりにエコーのような素敵なメッセージをユーザーに与える方法があるかどうか疑問に思っていました.

これは私が今持っているコードです:

public static function forceNumber($int){
    if(is_numeric($int)){
        return $int;
} else {
        throw new TypeEnforcerException($int.' must be a number');
}
}

public function setStatus($status) {
    try {
        $this->status = TypeEnforcer::forceInt($status); 
    } catch (TypeEnforcerException $e) {
        throw new Exception($e->getMessage());
    } catch (Exception $e) {
        throw new Exception($e->getMessage());
    }

}
4

1 に答える 1

5

これは、キャッチされていないすべての例外をキャッチできるフロントエンド コントローラーで解決するのが最適です。

<?php
require('bootstrap.php');

try {
    $controllerService->execute($request);
} catch (Exception $e) {
    $controllerService->handleControllerException($e);
}

例外は例外的なケースを通知するため、通常は 500 内部サーバー エラーであるため、内部サーバー エラーを返すコードを記述できます。ユーザーは、単にうまくいかず、プログラムがクラッシュしたということ以外に、何がうまくいかなかったかに興味を持ってはなりません。

例外をスローして検証通知を行う場合は、それらを別のレイヤーでキャッチする必要があります (そのために例外を使用する場合は、おそらく間違っています)。


編集:低レベル関数の場合、PHP は緩く型付けされているため、関数が int を想定している場合は、 int Docsにキャストします。

public static function forceNumber($int){
    $int = (int) $int;
    return $int;
}

これは実際に整数を強制します。キャストができない場合 ($int完全に互換性がないなど)、PHP は例外をスローします。

この例は、メソッドの名前を使用していくつかの数値を検証し、そうでない場合はエラーを提供するため、少し厄介です (ここでは誤って例外が発生します)。代わりに、いくつかの検証を行う必要があります。間違った入力が予想される場合、間違った入力が提供されるのは例外的なケースではないため、例外は使用しません。

于 2013-03-13T08:00:52.470 に答える