检查是否数字和比较条件与&&?

时间:2012-11-02 11:49:52

标签: php conditional numeric

在PHP中,如果有这样的条件:

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

}

如果if的第一部分为false,第二部分($my_var == 1)是否会被执行?

谢谢!

3 个答案:

答案 0 :(得分:2)

在您的示例中,$my_var == 1将不会被执行(如果它不是数字)。 PHP将确定第一部分评估为false,因此执行第二部分没有任何好处,因为您正在使用&& AND运算符。

一个例子:

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...

编辑:有一些通用的information here(不是特定于PHP的)。

答案 1 :(得分:1)

如果您使用false,则第一个条件为&&秒将不会执行。你可以自己试试:

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

我给了你这个例子,因为我在文档中找不到任何内容,但this section中的第一条评论

这称为按需调用延迟评估

注意:在某些情况下,尽管处于第一个条件状态,但执行第二个函数是有用的或必要的。在这种情况下,您可以使用& operator。使用按位运算符可以处理数字,而不是使用布尔值。因为php解释器应该知道&运算符之前和之后的值,它将执行两个函数(a() & b())和truefalse被评估为1和{ {1}} 0分别在1 & 0 => 0语句中评估为false

答案 2 :(得分:0)

您可以使用

if ( is_numeric($my_var)) {

    if($my_var == 1)
        {
            // your code
        }
}