为什么 empty('0') = true;空('00')=假;

时间:2021-08-01 14:36:02

标签: php

我评估 $var 使用

if(empty($_GET['var'])){
    ...
    }

我从 TRUE

https://myweb.com/?var=0

我取 FALSE

https://myweb.com/?var=00

3 个答案:

答案 0 :(得分:1)

empty pseudo-functioncasting to boolean 共享其逻辑 - 如果某物等同于“false”,则将其视为“空”。

被视为“空”的值列表旨在提供帮助,但有时会令人困惑,因为实际上没有一个完美的答案。从整数开始,0 是“空”似乎是合理的,但例如 1 不是。因为用户输入几乎总是以字符串的形式出现(特别是在网络上,PHP 最常用的地方),字符串 "0" 与整数 0 的行为相同也很有用。< /p>

从表面上看,"00" 也应该等同于 0,因此是“空的”,但现在事情开始变得混乱:如果将字符串 "hello" 转换为整数,即 also 0,那么 "hello" 也是空的吗?那不会很有用。

事实是,像这样的演员表只能真正发挥以下两种方式之一:

  • 对任何不是 100% 明确的转换抛出错误。
  • 选择一组最有用但不完全一致的折衷方案。

PHP 选择了第二条路线,empty("0")empty("00") 之间的差异是所选特定折衷方案的副作用之一。其他走类似路线的语言(例如 Perl、JavaScript)有不同的妥协,会产生不同的令人惊讶的结果。

另见my answer to a similar question here

答案 1 :(得分:0)

因为如果在没有类型的情况下进行检查,PHP 中的 0 将为空,但我认为 00 类型转换为字符串值,因此它不是空的。

您可以通过运算符 ===

严格检查类型

答案 2 :(得分:-1)

我认为这可能是因为您在代码中收到 00 作为字符串值。因为 000 都被 empty 中的 PHP 函数视为空。尝试在您的 PHP 之一中执行以下代码以更好地理解。您甚至可以查看sandbox link

<?php
$a = 0;
$b = 00;
$c = '00';

if(empty($a)) echo 'empty a'; 
if(empty($b)) echo 'empty b';
if(empty($c)) echo 'empty c';

?>

检查empty()函数的documentation,有一个被它认为是空的值列表。

<块引用>

empty() 函数检查变量是否为空。 如果变量存在且不为空,则此函数返回 false, 否则返回真。 以下值计算为空:

0
0.0
“0”
""

错误
数组()

此外,当您处理数字检查时,您应该始终将值类型转换为整数,然后比较它是否为 0。这将是理想的方法。

<?php
$a = 0;
$b = '0';
$c = '00';
$d = 1;
$e = '1';

if(!intval($a)) echo 'empty a '; 
if(!intval($b)) echo 'empty b ';
if(!intval($c)) echo 'empty c ';
if(!intval($d)) echo 'empty d ';
if(!intval($e)) echo 'empty e ';

?>