0

对于下面的代码,我得到一个打印任务然后退出的页面,即使任务的值为零。

$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?

4

2 回答 2

11

任何不能转换为数字的字符串都会自动转换为0;所以“删除”在与数字比较时为 0。

您也可以使用身份运算符进行比较以检查类型

if($task === "delete") {
    echo $task;
    exit(); 
}

这将确保检查类型并返回 false 作为结果。

于 2011-08-13T18:14:38.540 回答
2

您在三元运算符中缺少括号,请参阅运算符优先级中的示例:

$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 警告。

于 2011-08-13T18:14:24.870 回答