Aar*_*ken 71 php type-conversion
反正是为了使下面的代码仍然使用开关b而不返回a?谢谢!
$var = 0;
switch($var) {
case NULL : return 'a'; break;
default : return 'b'; break;
}
Run Code Online (Sandbox Code Playgroud)
当然,使用if语句,你可以这样做:
$var = 0;
if($var === NULL) return 'a';
else return 'b';
Run Code Online (Sandbox Code Playgroud)
但是对于更复杂的例子,这变得冗长.
Pet*_*tai 51
抱歉,您不能===在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'
?>
Run Code Online (Sandbox Code Playgroud)
是的。在 PHP 8 上,您可以使用match语句来完成。
与 switch 不同的是,比较是身份检查 (===) 而不是弱相等检查 (==)。匹配表达式从 PHP 8.0.0 开始可用。
请参阅此处:https : //www.php.net/manual/en/control-structures.match.php
$var=0;
echo match ($var) {
NULL=> 'a',
default => 'b'
};
Run Code Online (Sandbox Code Playgroud)
不是switch- 它只进行所谓的"松散"比较.您可以随时if/else if使用块替换它===.
这是“严格”开关语句中的原始代码:
switch(true) {
case $var === null:
return 'a';
default:
return 'b';
}
Run Code Online (Sandbox Code Playgroud)
这也可以处理更复杂的switch语句,如下所示:
switch(true) {
case $var === null:
return 'a';
case $var === 4:
case $var === 'foobar':
return 'b';
default:
return 'c';
}
Run Code Online (Sandbox Code Playgroud)