我有if语句有多个条件,
这两个条件有什么区别:
1.
if($province=="AB" || "NT" || "NU" || "YT")
{
$GST=5;
}
else if($province=="BC" || "MB")
{
$GST=5;
$PST=7;
}
else if($province=="NB" || "NF" || "ON")
{
$HST=13;
}
,第二是:
2.
if($province=="AB" || $province=="NT" || $province=="NU" || $province=="YT")
{
$GST=5;
}
else if($province=="BC" || $province=="MB")
{
$GST=5;
$PST=7;
}
else if($province=="NB" || $province=="NF" || $province=="ON")
{
$HST=13;
}
答案 0 :(得分:3)
两者之间的区别在于第一个不能按预期工作,第二个在技术上是正确的。
代码:
if($province=="AB" || "NT" || "NU" || "YT")
将始终求值为true并执行该条件块中的代码。
原因是您只检查$province == "AB"
是否正在检查"NT" == true
是否会评估为真。
要针对所有这些值(AB,NT,NU,YT)检查省,您需要针对每个值明确检查$province
,而不仅仅是第一个,这是您在第二个示例中正确执行的操作
答案 1 :(得分:2)
我添加到drew010答案,你也可以这样做(更简单):
if(in_array($province,array("AB","NT","NU","YT"))
{
$GST=5;
}
else if(in_array($province,array("BC","MB"))
{
$GST=5;
$PST=7;
}
else if(in_array($province,array("NB","NF","ON"))
{
$HST=13;
}
答案 2 :(得分:1)
第一个将始终评估为true。在第一个示例中的第二个,第三个和第四个OR
子句中,您基本上要求PHP将字符串转换为布尔值,而非空字符串将始终评估为true。
只是为了好玩,我最喜欢处理类似条件的方法是使用switch
语句。我阅读起来容易得多,但这确实是个人偏好的事情。
switch ( $province ) {
case 'AB' :
case 'NT' :
case 'NU' :
case 'YT' :
$GST = 5;
break;
case 'BC' :
case 'MB' :
$GST = 5;
$PST = 7;
break;
case 'NB' :
case 'NF' :
case 'ON' :
$HST = 13;
break;
}