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 "Zero" 我想要的 echo "Empty".这是否可以通过 switch 语句以某种方式完成,或者我只有将 if...elseif...else=== 运算符一起使用的唯一方法?

PHP的switch语句是documented to use loose comparison。如果您需要完全匹配,那么不幸的是,最好的办法是使用单独的 if/else 测试和 ===.

一个替代方案类似于

switch(true) {
    case $value === 0:
        //...
        break;
}

但这与一系列 if-else 语句大致相同,只是打字和缩进更多。

这样试试

$value = "";

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

    case ($value === 1):
        echo "One";
        break;

    case ($value === ""):
        echo "Empty";
        break;
}

DEMO

可以做到,你只需要翻转你比较的内容即可:

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

    case $value === 1:
    echo "One";
    break;

    case $value === "":
    echo "Empty";
    break;

    default:
    echo "None";
    break;
}