69

私は次のことをしようとしています:

try {
    // just an example
    $time      = 'wrong datatype';
    $timestamp = date("Y-m-d H:i:s", $time);
} catch (Exception $e) {
    return false;
}
// database activity here

要するに、データベースに入れるいくつかの変数を初期化します。なんらかの理由で初期化が失敗した場合 (たとえば、$time が期待される形式ではないため)、メソッドが false を返し、間違ったデータをデータベースに入力しないようにする必要があります。

ただし、このようなエラーは「catch」ステートメントではキャッチされず、グローバル エラー ハンドラによってキャッチされます。そして、スクリプトは続きます。

これを回避する方法はありますか?すべての変数の 99% で何も悪いことが起こらないことを考えると、すべての変数を手動で型チェックするのではなく、このようにする方がクリーンだと思いました。

4

5 に答える 5

53

解決策 1

ErrorExceptionを使用して、エラーを例外に変換して処理します。

function exception_error_handler($errno, $errstr, $errfile, $errline ) {
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
}
set_error_handler("exception_error_handler");

解決策 2

try {
    // just an example
    $time      = 'wrong datatype';
    if (false === $timestamp = date("Y-m-d H:i:s", $time)) {
        throw new Exception('date error');
    }
} catch (Exception $e) {
    return false;
}
于 2013-03-17T14:10:17.827 に答える
12

私が見つけた短いもの:

set_error_handler(function($errno, $errstr, $errfile, $errline ){
    throw new ErrorException($errstr, $errno, 0, $errfile, $errline);
});

すべてのエラーを catchable のインスタンスにするErrorException

于 2016-10-17T09:12:49.283 に答える