非常不寻常的PHP行为

Neo*_*Neo 0 php loose-typing

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

$task = (isset($_POST['task']))?$_POST['task'] :(isset($_GET['task']))?$_GET['task']:0; 
if($task == "delete") {
    echo $task;
    exit(); 
}
Run Code Online (Sandbox Code Playgroud)

输出:

0
Run Code Online (Sandbox Code Playgroud)

但是,如果我将第一行更改为:

$task = (isset($_POST['task'])) ? $_POST['task'] :(isset($_GET['task'])) ? $_GET['task'] : NULL;    
Run Code Online (Sandbox Code Playgroud)

它会正常工作,那么为什么字符串'delete'的值等于0?

Hea*_*ota 11

任何无法转换为数字的字符串都会自动转换为0; 因此,与数字比较时,"删除"为0.

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

if($task === "delete") {
    echo $task;
    exit(); 
}
Run Code Online (Sandbox Code Playgroud)

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