2012-01-15 3 views
2

私は例外の概念を理解しましたが、私はまだ、私が例外処理の方法を例外の方法に置き換えるべきではないと思います。これを変更して例外の使用を開始する必要がありますか?

validate_form_data($data, &$errors=array()) 
{ 
    //expects $_POST to be passed as argument ($data) 

    $errors = array(); 

    if(strlen($data['name']) < 3) 
     $errors[] = "Your name must contain at least 3 characters."; 

    if($data['age'] > 200) 
     $errors[] = "You can't be older than 200." 

    if(count($errors)) 
     return false; 
    else 
     return true; 
} 

///submit_form.php 

$errors = array(); 

if(validate_form_data($_POST, $errors)) 
{ 
    // do something like sending data to MySQL and output sucess message. 
} 
else 
{ 
    //loop thru the $errors array and display its values so the user knows what mistakes he made 
} 

私の質問は次のとおりです:ここに が、私は例外なく、物事を行う方法の一例として、簡単なコードだ私の人生を楽に例外を使用しますが、もしそうなら、どのように?

+0

ここでコードで例外の使用を検討していますか?ユーザーが無効な名前を入力したことは例外ではありませんが、期待する必要があるものです。 – KingCrunch

+0

私の気持ちは、実行の失敗を捕らえようとするときに、その失敗をうまく「処理」するという目的で有用です。それは最終的にはテクニックですが、私は@ KingCrunchと一緒です。あなたの例は、検証に似ていますが、壊れたトレーニングホイールを持つ関数ではありません。 –

答えて

4

例外として、その名前が示すように、アプリケーションの例外的な場合にスローする必要があります。しかし、あなたがやっているのはデータを検証することなので、無効なデータを扱うことは例外ではありません。それはあなたが期待している状態です。したがって、そのスクリプトで例外を使用しても、あなたの人生が楽になるわけではなく、正しいものでもありません。

function validate_form_data($data) 
{ 
    $errors = array(); 

    if (strlen($data['name']) < 3) { 
     $errors[] = "Your name must contain at least 3 characters."; 
    } 

    if ($data['age'] > 200) { 
     $errors[] = "You can't be older than 200."; 
    } 

    return $errors; 
} 
+0

6と半ダース。 –

+0

本当にありません。 '$ errors'はフォーム上でユーザに表示される貴重な情報を取得します。終わりにそれを投げ捨てることだけを集めることは奇妙に思えます。ブール値を維持することもできます。 –

+0

はい、わかっています。しかし私はまた、私のバージョンの検証機能を提案したかったのです。 :) –

0

私は例外は予期せぬ問題を暗示することを同意:私は変化するであろう

唯一のことは、あなたがエラーを返す方法です。 1つは、コードが問題を具体的にチェックしているため、間違いなく期待しているコードです。 例外

それらは除外さが、考慮しなければならないケースが知られているなどの一般的なルールに準拠したからか、いない除外何も、原則として、クラス、

の定義から。これらは、通常の実行フローを残して、ローカルではない問題をより簡単に処理する必要がある状況に対応するように設計されています。

エラーを検出する方法がそれを処理しない場合、つまり、どのような処理を行うかを決定する場合は、例外をスローして、呼び出し元が処理したり、呼び出し元に伝播させたりすることができます。そうです。これを行うには、エラーコードを返すことができますが、実行スタック内のすべての呼び出し元がエラーコードをチェックし、エラーコードを返すように強制します。メソッドがそれをキャッチしない場合、PHPは自動的に例外を呼び出し側に返します。

上記のメソッドの目的は、ユーザーの入力の妥当性をチェックすることであるため、チェックの結果を返す方が適切です(yesまたはno)。また、メソッドを呼び出すコードでその結果を使用するため、スタックに例外をバブルさせる必要はありません。

関連する問題