2009-08-23 3 views
0

関数add_new_userはif節内にある場合にSQL INSERTクエリを実行しますか?私は関数がこのif節で副作用が実行されるかどうか

function add_new_user ($username, $email, $passhash_md5) 
{ 
    -- cut: database INSERT queries 
    return 1;                         
} 

私は

if (validate($username, $password, $email) == 1) { 
    if (add_new_user ($username, $email, $passhash_md5) == 1) { 
       // problem here 
       -- cut 
    }                           
} 

として上記のコードを使用している

私はthis handlerは常に失敗しregistraton通知を与える理由はわからないので、私はこの質問をしました。 2つのコードはハンドラに属します。このバグは私のコードの構文にあるようであり、おそらくif/elseの使用にあるようです。

+0

ありがとうございました! –

答えて

4

-clause場合、それは 内にある場合、関数add_new_userは SQLのINSERTクエリを実行していますか?

はい

function foo() { 
    echo 'A'; 
    return true; 
} 

function bar() { 
    echo 'B'; 
    return false; 
} 

if (foo()) { 
    if (bar()) { 
    echo 'C'; 
    } 
} 
// Output: AB 
3

はい

機能最初の取得、それの戻り値を評価しました。

戻り値が知られた後、戻り値は整数値1

1

はいと比較されます。 if () {の間のものは、それが真であるかどうかを見るために実行されます。あなたは本当にここで何でもすることができます。

1

PHPはブロックを実行するかどうかを判断するためにブール式を評価する必要があります。したがって、 "=="演算子を評価するには、関数 "add_new_user"を含む両辺を評価する必要があります。

だから、答えは次のとおりです。はい、それが機能add_new_userを評価するAND(あなたがこれをブロックしますadd_new_user内部のいくつかのコードを持っていない限り)それは挿入操作を実行します。

ただし、可能な場合は避けるべきことをしています。副作用のある状態を使用していることです。これはあなたに頭痛を与えます(例えば、今すぐ!)。

+0

副作用の意味を明確にしてください。あなたの答えは、しかし、私はそれが機能にアクセスされているかどうかを確認する必要はないことを示唆している。 **私はまだクエリが何とか成功したかどうかを確認したいと思うでしょう。** –

+1

副作用はディスク/ストリーム/データベースへの書き込み、接続のオープンなどのようなものです。副機能を持つ関数を知っているはずです(add_new_userには1つ、例えば)。次に、これらの関数を呼び出すと、副作用が発生することを知っておく必要があります。元の質問は次のように言い換えることができます: "副作用はこの 'if'文で実行されますか?"確かに、あなたはそれが成功したかどうかをチェックしなければなりません、あなたのやり方は悪くないです。副作用について私が言ったことを覚えておいてください。 Googleが「純粋な機能」や「副作用のない機能」についてもっと詳しく知りたい! –

関連する問題