Mat*_*att 0 php switch-statement
我最近讨论了如何switch处理比较,并需要帮助解决它.
如果我写了switch如下:
switch ($x){
case ($x > 5):
echo "foo";
break;
case ($x < 5):
echo "bar";
break;
default:
echo "five";
break;
}
Run Code Online (Sandbox Code Playgroud)
哪个if陈述相当于?A还是B?
// A
if ($x > 5) {
echo "foo";
} elseif ($x < 5) {
echo "bar";
} else {
echo "five";
}
// B
if ($x == ($x > 5)) {
echo "foo";
} elseif ($x == ($x < 5)) {
echo "bar";
} else {
echo "five";
}
Run Code Online (Sandbox Code Playgroud)
对每个人,让我澄清一下:
它相当于B.
它不是"两者",它有时不是它的一部分,有时它是另一部分,它始终是B.要理解为什么有时会看到表明它可能存在的结果A,您需要了解类型强制在PHP中是如何工作的.
如果您在falsey值传递给了"说法" switch,并使用表达式中的cases表示导致一个布尔值,如果你的表达式求他们将只匹配FALSE.
switch基本上是一个巨大的if/ elseif树,它在传递给(表达式的左侧)的值和s(右侧)中的表达式之间执行松散的比较(==而不是).===switchcase
$x = 0;
switch ($x) {
case $x > -1: // This is TRUE, but 0 == FALSE so this won't match
echo "case 1";
case $x == -1: // This is FALSE, and 0 == FALSE so this will match
echo "case 2";
}
Run Code Online (Sandbox Code Playgroud)
如果我们将其转换为两个if/ elseif树:
答:
$x = 0;
if ($x > -1) {
// It matches here
echo "case 1";
} else if ($x == -1) {
// and not here
echo "case 2";
}
Run Code Online (Sandbox Code Playgroud)
B:
$x = 0;
if ($x == ($x > -1)) {
// It doesn't match here
echo "case 1";
} else if ($x == ($x == -1)) {
// ..but here instead
echo "case 2";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
317 次 |
| 最近记录: |