提问人:Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 提问时间:1/10/2016 最后编辑:Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 更新时间:11/5/2018 访问量:1546
switch 语句 PHP 中的相同匹配(使用类型检查)
Identical match (with type checking) in switch statement PHP
问:
刚刚发现了一个奇怪的情况,我们只需要在相同的匹配(具有确切类型)上运行语句。试想一下这个场景:switch
$value = "";
switch ($value) {
case 0:
echo "Zero";
break;
case 1:
echo "One";
break;
case "":
echo "Empty";
break;
default:
echo "None";
break;
}
这将“零”,我希望它“空”。这是否可以以某种方式与语句一起使用,或者我只有与运算符一起使用的方法?echo
echo
switch
if...elseif...else
===
答:
5赞
jbafford
1/10/2016
#1
PHP 的 switch 语句被记录为使用松散比较。如果您需要完全匹配,那么不幸的是,最好的办法是使用单独的 if/else 测试。===
一种替代方法是类似于
switch(true) {
case $value === 0:
//...
break;
}
但这与一系列 if-else 语句大致相同,只是有更多的键入和缩进。
评论
1赞
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
1/11/2016
的确,它有更多的缩进和稍微多一点的打字,但我认为它比语句更干净、更可读!无论如何,感谢您提到“松散比较”,我在检查文档时错过了!if....elseif...else
5赞
Anik Islam Abhi
1/10/2016
#2
试试这个
$value = "";
switch (true) {
case ($value === 0):
echo "Zero";
break;
case ($value === 1):
echo "One";
break;
case ($value === ""):
echo "Empty";
break;
}
评论
0赞
Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
1/10/2016
不完全是我想要的,但它仍然比使用更能达到目的。我会接受这一点,如果下一个答案没有找到其他更好的选择!谢谢。if...elseif...else
1赞
Anik Islam Abhi
1/10/2016
多诺巴德:) @TareqMahmood
0赞
solocommand
1/10/2016
#3
这是可以做到的,你只需要翻转你正在比较的内容:
switch(true) {
case $value === 0:
echo "Zero";
break;
case $value === 1:
echo "One";
break;
case $value === "":
echo "Empty";
break;
default:
echo "None";
break;
}
上一个:自动检查两个对象是否相等?
评论