使开关使用 === 比较不是 == 比较 在 PHP 中

2022-08-30 08:10:05

无论如何,是否有使它使下面的代码仍然使用开关并且不返回?谢谢!ba

$var = 0;
switch($var) {
    case NULL : return 'a'; break;
    default : return 'b'; break;
}

当然,使用if语句,你会这样做:

$var = 0;
if($var === NULL) return 'a';
else return 'b';

但对于更复杂的示例,这变得冗长。


答案 1

抱歉,您不能在 switch 语句中使用比较,因为根据 switch() 文档===

请注意,开关/机箱会进行松散的比较。

这意味着您必须提出解决方法。从松散的比较表中,您可以利用按类型转换为假的事实:NULL == "0"

<?php
$var = 0;
switch((string)$var) 
{
    case "" : echo 'a'; break; // This tests for NULL or empty string   
    default : echo 'b'; break; // Everything else, including zero
}
// Output: 'b'
?>

现场演示


答案 2

以下是“严格”开关语句中的原始代码:

switch(true) {
    case $var === null:
        return 'a';
    default:
        return 'b';
}

这也可以处理更复杂的 switch 语句,如下所示:

switch(true) {
    case $var === null:
        return 'a';
    case $var === 4:
    case $var === 'foobar':
        return 'b';
    default:
        return 'c';
}

推荐