在PHP中,如果有这样的条件:
if ( is_numeric($my_var) && $my_var == 1 ) {
}
如果if的第一部分为false,第二部分($my_var == 1
)是否会被执行?
谢谢!
答案 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()
)和true
,false
被评估为1
和{ {1}} 0
分别在1 & 0 => 0
语句中评估为false
。
答案 2 :(得分:0)
您可以使用
if ( is_numeric($my_var)) {
if($my_var == 1)
{
// your code
}
}