一尘不染

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

php

无论如何,要使下面的代码仍然使用开关,b而不返回它,是a吗?谢谢!

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

当然,如果使用if语句,您将像这样:

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

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


阅读 286

收藏
2020-05-29

共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'
?>
2020-05-29