对于下面的代码,我得到一个打印任务的页面,然后退出,即使任务的值为零。
$task = (isset($_POST['task']))?$_POST['task'] :(isset($_GET['task']))?$_GET['task']:0;
if($task == "delete") {
echo $task;
exit();
}
输出:
0
但是,如果我将第一行更改为:
$task = (isset($_POST['task'])) ? $_POST['task'] :(isset($_GET['task'])) ? $_GET['task'] : NULL;
它会正常工作,为什么字符串'delete'的值等于0?
答案 0 :(得分:11)
任何无法转换为数字的字符串都会自动转换为0;因此,与数字比较时,“删除”为0。
您可以使用身份运算符进行比较以及检查类型
if($task === "delete") {
echo $task;
exit();
}
这将确保检查类型并因此返回false。
答案 1 :(得分:2)
您的三元运算符中没有括号,请参阅operator precedence:
中的示例$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
你的例子:
$task =
(
(isset($_POST['task']))
? $_POST['task']
: (isset($_GET['task']))
)
? $_GET['task']
: 0;
因此,根据您的$_POST
和$_GET
,您甚至可能会收到“无效索引”PHP警告。