这里发生了什么?我的大脑来晚了吗?
我有一个包含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
once 但不是 true
再次......无论我做什么。我真的不明白。
更新: 我的 PHP 版本刚刚从 7.0.13 更新到 7.0.15。你猜怎么着……还是一样的输出:
Apache/浏览器:正确
控制台:错误
最佳答案
为此你可以使用 isset
<?php
$foo = 'bar';
$bar = null;
switch ($foo) {
default:
case 'bar':
if (isset($bar)) {
echo "true";
die();
} else {
echo "false";
die();
}
}
此代码将回显 false
。
您还可以使用双非运算符:
<?php
$foo = 'bar';
$bar = null;
switch ($foo) {
default:
case 'bar':
if (!!$bar) {
echo "true";
die();
} else {
echo "false";
die();
}
}
default
案例的问题
在您提供的代码(以及我重新引用的代码)中,无论 $foo
设置了什么,您每次都会点击 case 'bar'
到。
<?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
而没有其他内容。
关于php - if 语句对空变量说真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41970037/