在switch语句PHP中完全匹配(带类型检查)

时间:2016-01-10 06:02:09

标签: php switch-statement equality

刚刚发现一个奇怪的情况,我们只需要在相同的匹配(精确类型)上运行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 ===运算符吗?

3 个答案:

答案 0 :(得分:4)

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

一种替代方案类似于

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

但这与一系列if-else语句大致相同,但更多的输入和缩进。

答案 1 :(得分:4)

试试这个

$value = "";

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

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

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

DEMO

答案 2 :(得分:0)

可以做到,你只需要翻转你所比较的东西:

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

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

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

    default:
    echo "None";
    break;
}