switch 语句 PHP 中的相同匹配(使用类型检查)

Identical match (with type checking) in switch statement PHP

提问人:Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 提问时间:1/10/2016 最后编辑:Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ 更新时间:11/5/2018 访问量:1546

问:

刚刚发现了一个奇怪的情况,我们只需要在相同的匹配(具有确切类型)上运行语句。试想一下这个场景:switch

$value = "";

switch ($value) {
    case 0:
        echo "Zero";
        break;

    case 1:
        echo "One";
        break;

    case "":
        echo "Empty";
        break;

    default:
        echo "None";
        break;
}

这将“零”,我希望它“空”。这是否可以以某种方式与语句一起使用,或者我只有与运算符一起使用的方法?echoechoswitchif...elseif...else===

php switch-语句 相等

评论


答:

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;
}

DEMO

评论

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;
}