1

die();PHPでデータを検証するときに関数を過度に使用するのはプログラミングの悪い習慣ですか?

その関数を十数回以上使用したクラスを構築しているため、検証テストが失敗するとスクリプト全体が停止します。それは良い習慣ですか、それを行うべきより良い方法はありますか? このプラクティスは言語によって異なりますか?プログラミング全体の慣習や学ぶべきベストプラクティスはありますか?

次に例を示します。

    if($error = $this->checkDate($start)){
        echo "START: ".$error."\r\n";
        die();
    }

    if($error = $this->checkDate($end)){
        echo "END: ".$error."\r\n";
        die();
    }

    if($start>$end){
        $error = "The start date must come <i>after</i> the end date!";
        echo $error;
        die();
    }
    if(($end-$start)<(3*24*3600) || ($end-$start)>(3*30*24*3600)){
        $error = "The period must be at <i>least</i> 3 days long, and at <i>most</i> 3 months long. This date spans about ".round(($end-$start)/(3600*24*30))." months.";
        echo $error;
        die();
    }

などなど…

PS - 「ベストプラクティス」はまだタグではありませんか??

4

2 に答える 2

2

より大きなシステムを構築している場合、失敗したとしても、テンプレート化などのように、より多くの出力が必要になるでしょう。ここで終了する方法は、きれいな方法でそれを達成するのを難しくします。

アプリケーションが非常に小さいことを意図しているため、この検証後に何もする必要がない場合は、おそらく問題ありませんが、後で必要になった場合に備えて、簡単に拡張できるコードを常に作成する必要があります。

それが私に任されていれば、代わりに例外をスローし、より高いネストレベルで例外を適切に処理するでしょう。

ただし、このアプリケーションでの実際の意図に基づいて、自分で電話をかける必要があります。適切かもしれませんが、おそらくそうではありません。

于 2013-08-25T23:08:05.070 に答える
1

あなたのアプローチには、実際には2 つの重大な欠陥があります。

  • 実際のところ、製品コードには単一の die() ステートメントがあってはなりません。
  • また、単語を出力するクラスメソッドはありません。

フォーム検証について言えば、あなたの考えはユーザーエクスペリエンスを難しく時代遅れにしています。優れたウェブサイトは常にエラーで表示されます

  • フォーム自体
  • 入力されたすべてのデータ
  • すべてのエラーを一度に修正して、ユーザーがすべてを修正できるようにし、最後のエラーに到達するまでフォームを何度も送信しないようにします。
于 2013-08-26T00:10:35.087 に答える