0

PHPでは、次のような条件があります。

if ( is_numeric($my_var) && $my_var == 1 ) {

}

ifの最初の部分がfalseの場合、2番目の部分($my_var == 1)は実行されますか?

ありがとう!

4

3 に答える 3

2

あなたの例では、$my_var == 1は実行されません(数値でない場合)。PHPは、最初の部分が評価されたと判断します。したがって、 AND演算子falseを使用しているため、2番目の部分を実行してもメリットはありません。&&

例:

if(isset($_GET['something']) && $_GET['something'] == '1')
{

}

クエリ文字列変数somethingが欠落している場合、それがに等しいかどうかはチェックされません1。もしそうなら、それはUndefined index通知を生成する可能性があります。

次のような方法でこの動作を確認することもできます。

$test = '2';
if($test == '1' && die('dead'))
{

}

echo 'execution continues....';

を設定$test = '2'すると、die()実行が停止しません。に設定する1と、ダイが実行および停止するため、表示されませんExecution continues...

編集:ここにいくつかの一般的な情報があります(PHP固有ではありません)。

于 2012-11-02T11:53:02.113 に答える
1

最初の条件がfalse2番目の条件である場合、を使用すると実行されません&&。あなたはそれを自分で試すことができます:

function a(){
echo 'a';
return true;
}

function b(){
echo 'b';
return true;
}

if (a() && b())
{
    //do something
}

これにより、次のように出力されますab

function a(){
echo 'a';
return false;
}

function b(){
echo 'b';
return true;
}

if (a() && b())
{
    //do something
}

出力a

ドキュメントに何も見つからなかったので、この例を示しましたが、このセクションの最初のコメント

これは、必要に応じた評価または遅延評価と呼ばれます。

注:場合によっては、最初の条件の状態に関係なく、2番目の関数を実行すると便利または必要になります。その場合、&演算子を使用できます。ビット単位の演算子を使用すると、ブール値ではなく数値を操作できます。&phpインタープリターは、演算子の前後の両方の値を知っている必要があるため、関数( a() & b())とtrue、の両方を実行し、それぞれ、ステートメントのようにfalse評価されるととして評価されます。101 & 0 => 0falseif

于 2012-11-02T11:55:52.233 に答える
0

あなたはのように使うことができます

if ( is_numeric($my_var)) {

    if($my_var == 1)
        {
            // your code
        }
}
于 2012-11-02T11:51:28.983 に答える