开关语句PHP中的完全匹配(带有类型检查)

Tᴀʀ*_*ᴏᴏᴅ 5 php equality switch-statement

刚刚发现一种奇怪的情况,我们只需要switch在完全相同的匹配(具有精确类型)上运行语句。请考虑以下情况:

$value = "";

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

    case 1:
        echo "One";
        break;

    case "":
        echo "Empty";
        break;

    default:
        echo "None";
        break;
}
Run Code Online (Sandbox Code Playgroud)

这将echo “零”设置为我要echo “清空”的位置。这可以用某种方式处理switch语句吗?还是我只能if...elseif...else===运算符使用?

jba*_*ord 5

PHP的switch语句已记录为使用松散比较。如果您需要完全匹配,那么不幸的是,最好的选择是对使用单独的if / else测试===

一种替代方法是类似于

switch(true) {
    case $value === 0:
        //...
        break;
}
Run Code Online (Sandbox Code Playgroud)

但这与一系列if-else语句几乎相同,但具有更多的键入和缩进。


Ani*_*bhi 5

这样尝试

$value = "";

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

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

    case ($value === ""):
        echo "Empty";
        break;
}
Run Code Online (Sandbox Code Playgroud)

DEMO