0

基本的に今日は、単純なログイン方法でいくつかの例外を使用してテストすることにしました。これは、多くのサイトでそれらについてしばらく読んでいたためですが、それらをコードに追加し始めると、混乱するだけなので、今日はうまくいけば何が間違っているのかがわかる日。

これはログイン方法です(入力部分の検証のみで、データベースや意味のあるメッセージはありません):

public function login($username, $password) {

    try {
        $this->security->validateInput($username, 'String', array(20, 6), 'username');
    }
    catch(InvalidArgumentException $e) {
        echo $e->getMessage();
    }
    catch(LengthException $e) {
        echo $e->getMessage();
    }
    catch(InvalidFormatException $e) {
        echo $e->getMessage();
    }

}

catch ブロックから、validateInput() メソッドがスローする例外を確認できます。

私が得られないのは、検証する $password 変数もありますが、次のように $username の検証の下に置くのは意味がありません。

try {
    $this->security->validateInput($username, 'String', array(20, 6), 'username');
    $this->security->validateInput($password, 'String', array(16, 8), 'password');
}

例外を完全に間違った方法で使用していますか?ログイン スクリプトやその他の同様のスクリプトで使用することは想定されていませんか?

どんな助けでも大歓迎です。

4

1 に答える 1

0

「必要」を定義する

特定のケースで例外をスローする必要があるかどうかは、おそらく議論の余地があります。特に、PHP のような緩く型付けされた言語では。いつ例外を使用するかについての議論に興味がある場合は、Programmers.SEにアクセスして、このトピックについて彼らが何を述べているかを確認してください。具体的には、 Defensive Programming Vs Exception Handlingという質問を見ることができます。私の答えの残りの部分では、例外をスローする必要があるかどうか、またはそれが正しいことであるかどうかを無視します。正しさの議論は脇に置いて、あなたの問題に集中できるように最善を尽くします。

暗闇の中をつまずく

それでは、問題を調べてみましょう。OOP を使用して PHP スクリプト経由でユーザーをログインしようとしています。初めまして、失礼いたしました。私の意見では、PHP の OOP はひどいものです。ただし、検証をどのように処理するかは、個人的な好みや状況によって大きく異なります。それでは、最初にいくつかの質問に答えましょう。

  • 他のスクリプトはこれとどのようにやり取りしていますか? 検証で考慮すべき重要なことは、他のスクリプトがこれとどのように相互作用するかです。Web サイト用の単純なログイン フォームをコーディングしていて、検証をログイン ページでのみ行う必要がある場合は、例外を気にせずに、エラーが発生したことを示すページにユーザーを表示またはリダイレクトする方が簡単です。ログインせずに.呼び出し元のコードにそれを処理する方法を理解させます。
  • すべての例外を別々に扱いたいですか? セキュリティ上の理由から、異なるエラー メッセージでユーザー名とパスワードを処理しないでください。これにより、ユーザー名が正しいかどうかを簡単に確認できますが、これはセキュリティ上の問題です (ほとんどの場合)。また、彼らが「近い」かどうかも言わないでください。しかし、それはユーザー名の無効な文字を同じように処理したいということですか? これは、必要に応じてエラーを同じように処理しながら、エラーを柔軟に区別できるため、例外が役立つ場所です。検証でそれを行うのではなく、呼び出し元のコードがその決定を下すようにします。
  • 他のコーダーがあなたのコードを使用する予定ですか? これは私にとって重要なものです。説明的な例外とメッセージは、私が間違っていた仮定を教えてくれます。不可解な戻り値や、予期していなかった単純なリダイレクトはイライラする可能性があります。ライブラリ、または他の場所で再利用されるコードを作成しようとしている場合は、記述的な例外をスローする必要があります。また、適切なドキュメントを用意してください:)
  • サーバーは PHP 例外を処理するようにどのように構成されていますか? AJAX リクエストまたは同様の REST API リクエストを実行している場合、サーバーが PHP からのエラーをどのように処理するかを知っておくと実際に役立ちます。多くは、未処理の例外に対して「500 サーバー エラー」をスローするように構成されています。ただし、特に開発設定が使用されている場合は、発生したエラーが表示され、メッセージが出力されます。これは学習時には役立ちますが、実際のサイトには適していません。知っているすべての例外を処理していることを確認するか、相手に期待する有用なエラー メッセージを表示する必要があります。

どうしましょう?

OOP では、他の方法を使用して物事を処理するのではなく、常に例外をスローする傾向があります。例外を使用すると、他のコード部分にアクセスして変更する必要がないため、再利用が容易になります。オブジェクトは、毎回書き直さなくてもオブジェクトを何度も何度も使用できるように、独立している必要があります。これは、問題を 1 か所で修正できるため、ログインの検証などで特に役立ちます。さらに学習するにつれて、継続的に改善することができます。

于 2012-12-29T19:39:03.753 に答える