首页 > 解决方案 > 为什么空('0')=真;空('00')=假;

问题描述

我评估$var使用

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

我从

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

我从

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

标签: php

解决方案


empty伪函数与转换为布尔值共享其逻辑-如果某些内容等同于“假”,则认为它是“空的”。

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

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

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

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

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

另请参阅我对类似问题的回答


推荐阅读