这里发生了什么?对我的大脑来说是迟到了吗?
我有一个包含 exaclty 以下代码的php文件。
<?php
$foo = 'foo';
$bar = null;
switch ($foo) {
default:
case 'foo':
if ($bar) {
echo 'true';
} else {
echo 'false';
}
}
在浏览器中运行时打印true
,但在命令行上运行时false
...如何?当我删除行default:
时,我注意到它有效,但是整个switch语句应该如何与此相关?它仍然是一个简单的if (null) { doing this anyway }
PHP 7.0.13 的的Apache / 2.4.18
是的......我清除了浏览器缓存,点击了ctrl + f5 ......我甚至更改了脚本文件名。
更新
在对这个简单文件进行更改后...(只是在末尾添加空格)并在浏览器中点击f5后,它再次显示false
一次而不是true
...不管我做什么。我真的不明白。
更新 我的PHP版本刚刚从7.0.13更新到7.0.15。猜猜是什么...仍然是相同的输出:
Apache / Browser:true
控制台:false
答案 0 :(得分:1)
为此,您可以使用isset
<?php
$foo = 'bar';
$bar = null;
switch ($foo) {
default:
case 'bar':
if (isset($bar)) {
echo "true";
die();
} else {
echo "false";
die();
}
}
此代码将回显false
。
你也可以使用double not运算符:
<?php
$foo = 'bar';
$bar = null;
switch ($foo) {
default:
case 'bar':
if (!!$bar) {
echo "true";
die();
} else {
echo "false";
die();
}
}
default
案例
在您提供的代码(以及我重新引用的代码)中,无论case 'bar'
设置为什么,您每次都会点击$foo
。
<?php
$foo = 'notbar';
$bar = null;
switch ($foo) {
default:
case 'bar':
if (!!$bar) {
echo "true";
die();
} else {
echo "false";
die();
}
}
此代码仍会回显false
。
您应该做的是在默认情况下包含break
。
<?php
$foo = 'notbar';
$bar = null;
switch ($foo) {
default:
echo "default";
break;
case 'bar':
if (!!$bar) {
echo "true";
die();
} else {
echo "false";
die();
}
break;
}
此代码将回显default
,而不是其他任何内容。