我评估 $var
使用
if(empty($_GET['var'])){
...
}
我从 TRUE
https://myweb.com/?var=0
我取 FALSE
https://myweb.com/?var=00
答案 0 :(得分:1)
empty
pseudo-function 与 casting to boolean 共享其逻辑 - 如果某物等同于“false”,则将其视为“空”。
被视为“空”的值列表旨在提供帮助,但有时会令人困惑,因为实际上没有一个完美的答案。从整数开始,0
是“空”似乎是合理的,但例如 1
不是。因为用户输入几乎总是以字符串的形式出现(特别是在网络上,PHP 最常用的地方),字符串 "0"
与整数 0
的行为相同也很有用。< /p>
从表面上看,"00"
也应该等同于 0
,因此是“空的”,但现在事情开始变得混乱:如果将字符串 "hello"
转换为整数,即 also 0
,那么 "hello"
也是空的吗?那不会很有用。
事实是,像这样的演员表只能真正发挥以下两种方式之一:
PHP 选择了第二条路线,empty("0")
和 empty("00")
之间的差异是所选特定折衷方案的副作用之一。其他走类似路线的语言(例如 Perl、JavaScript)有不同的妥协,会产生不同的令人惊讶的结果。
答案 1 :(得分:0)
因为如果在没有类型的情况下进行检查,PHP 中的 0 将为空,但我认为 00 类型转换为字符串值,因此它不是空的。
您可以通过运算符 ===
答案 2 :(得分:-1)
我认为这可能是因为您在代码中收到 00
作为字符串值。因为 0
和 00
都被 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 ';
?>