2

User クラスのオブジェクトを作成するメソッドがありますが、ユーザーが見つからない場合は何かを返す必要がありますが、何がわからない:

function getUserById($id)
{
    $sth = $this->db->prepare("SELECT id, username, password, salt, email, created, last_active FROM users WHERE id = ?");
    $sth->execute(array($id));

    $sth->setFetchMode(PDO::FETCH_OBJ);

    if ($sth->rowCount() == 0) {
        //return what?
    }

    $row = $sth->fetch();
    $user = new User($row);

    return $user;
}

そして、メソッドは次のように使用する必要があります。

$user = $user_mapper->getUserById($id);

問題は、ユーザーが見つからない場合の対処方法です。$user 変数をオブジェクトに設定するときに、try catch ブロックを使用して、rowCount == 0 if ステートメントで例外をスローするか、単に false を返して if ステートメントを使用する必要がありますか?

4

3 に答える 3

5

それは完全にあなたとあなたのエラー処理哲学次第です。

私はこれを以下に基づいて決定します:これは例外的なイベントですか?これは決して起こらないはずですか?
答えが「はい」の場合、例外をスローします。答えがこれが起こるかもしれないということであるならば、私はこの場合を処理する必要がありますreturn false

于 2012-04-27T09:28:40.037 に答える
1

null を返します。この関数には 1 つの責任があります。ID に従ってユーザーを見つけようとします。何も見つからなかった場合は、何も見つかりませんでした。「null」はまさにそれを示しています。その後、問題を処理するのは、この関数を呼び出すコードです。

たとえば、ログイン/パスワードではなくIDでユーザーを探しているので、例外もスローする必要があります。アプリケーションのどこかに問題がある可能性があるためです。IDがある場合、データベース内の何かにリンクする必要があります。

于 2012-04-27T09:35:03.407 に答える
0

1つの関数から管理できる一貫したロギング方法またはユーザーへのフィードバック方法を使用できるため、カスタム例外ハンドラーを追加することをお勧めします。ガイダンスについては、 http://php.net/manual/en/function.set-error-handler.phpを参照してください。

したがって、例外をスローするときは、説明的であるようにしてください。debug_backtrace例外がトリガーされたときの実行状態を確認するために使用することもできます。http://www.php.net/manual/en/function.debug-backtrace.phpを参照してください。

于 2012-04-27T09:28:47.617 に答える