刚刚发现一种奇怪的情况,我们只需要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
用===
运算符使用?
PHP的switch语句已记录为使用松散比较。如果您需要完全匹配,那么不幸的是,最好的选择是对使用单独的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