2011-12-24 7 views
0

どのコードがより効果的であるか疑問に思っていました。つまり、より高速な&を意味します。 私のクライアントが自分のウェブサイトにデータを投稿したとき、他の人の必要がないため、英数字以外のものを使用することはできません。 私の質問は、これに対してより高速で信頼性の高い例外がありますか?あるいは、私はこの目的のために例外から離れていなければなりませんか? ここに私のコードです。どのコードがより効果的ですか?

通常の方法 -

function checkStr ($str) 
{ 
    if (preg_match('/[^0-9a-zA-Z]/', $str) > 0)) 
    { 
    return false; 
    } 
    else 
    { 
    return true; 
    } 
} 
if (checkStr($_POST['field']) == true) 
{ 
    //continue 
} 
else 
{ 
    echo "Invalid characters"; 
} 

例外 - (など他の場合、ELSEIF、)より通常のプログラムフローコントロール機能よりも、それらに関連するオーバーヘッドを持っているので、純粋にそのから

function checkStr ($str) 
{ 
    if (preg_match('/[^0-9a-zA-Z]/', $str) > 0) 
    { 
     throw new Exception('Invalid characters'); 
    } 
    return true; 
} 

    try 
    { 
     checkStr($_POST['field']); 

     //no exception, continue with code 
    } 

    catch (Exception $e) 
    { 
     echo $e->getMessage(); 

    } 
} 
+0

私の投票は、後で(例外クラスを使用して) – diEcho

+1

あなたはそれをベンチマークしようとしましたか? – ianace

+0

私は、 'スロー'の後に 'return'を書く必要がないと思う。 – diEcho

答えて

0

例外視点は最初のオプションが速いです。例外はトリッキーなもので、PHPには比較的新しく追加されたものなので、それらを過度に使用する傾向があります。通常、コード内で発生した状況が例外的な場合にのみ、例外をスローします。

たとえば、有効な入力が1〜100の整数である関数を使用すると、入力が40の場合はtrue、入力が493の場合はfalse、それ以外の場合はfalseが返されます。 "kumquat"の入力。

ところで、あなたは、単一の行にあなたの関数の最初のバージョンを書き込むことができます。

function checkStr ($str) 
{ 
    return (preg_match('/[^0-9a-zA-Z]/', $str) > 0)); 
} 
2

例外はいくつかのパフォーマンス・オーバーヘッドを持つことになりますが、パフォーマンスが唯一の基準ではありません。コードのサイズと複雑さ、および全体的な保守性も考慮してください。

非常に多くの場合、メソッドからの戻り値がチェックされず、エラーが無視されるコードが発生します。コードは簡単です

は、私は、PHPプログラマーないんだけど、Javaで、私は非常に多くの例外を使用する傾向がある

if (do this) 
    if (do that) 
     if (something else) 
      OK 
     else 
      bad something 
     else 
     bad that 
else 
     bad this 

かと例外

try 
    do this 
    do that 
    something else 
catch 
    report error 

を理解します。

+0

メンテナンスできないレガシーコードの管理に無駄な時間を費やしてしまったので、私は例外を含むバージョンに強く投票します。 – bbb

関連する問題