为什么0等于任何东西

<?php
$a = $_GET['a'] ?? 0;
if($a == 'a'){
    echo '0等于任何东西?:'.$a;
}

这里面的表达式为什么会成立?
0'a'有什么地方相等?
$a = $_GET['a'] ?? 1;或是'0',则表达式不成立!

阅读 3.7k
5 个回答
var_dump((int)"a");

运行一下上面的代码你就知道为什么了。

这是字符串转换为数值的问题.
简单来讲,字符串开头是数字的就转成数字,开头没有数字的转成0

var_dump((int)"123a");//123
var_dump((int)"a");//0

文档在这

??是php7的新语法
上述代码定价于:

<?php
$a = isset($_GET['a']) ? $_GET['a'] : 0;
if($a == 'a'){
    echo '0等于任何东西?:'.$a;
}

当未接收到get请求值a时,$a=0; 所以$a的值应该是get请求的中a参数的值。另外:0 和 'a'什么地方也不相等!
你这个问题少个关键的环节,就是发起get请求时参数a的值是什么。

  1. == 是类型转换之后相等即为 TRUE
  2. 如果你想比较 0 与 '0' 的类型的话,应该使用 ===

字符串和数字比较的时候,会把字符串转成数字,如果不能转成数字则是0。

所以,不含有数字的字符串都转成了 0

解决方法:

  1. 用 === 去比较
  2. 把真值表: https://www.php.net/manual/zh... 记下来。
推荐问题