在php中,为什么空(";0";)返回true?
根据php文档,调用在php中,为什么空(";0";)返回true?,php,string,isset,Php,String,Isset,根据php文档,调用empty($var) “”(空字符串) 0(0作为整数) 0.0(0作为浮点数) “0”(0作为字符串) 空的 假的 array()(空数组) $var;(声明了一个变量,但没有值) 我发现了如何通过使用empty($var)&&$var!=0但php开发人员为什么要这么做? 我认为这很荒谬,希望你有这样的代码: if (empty($_POST["X"])) { doSomething(); } 我认为“0”不是空的,空的是什么都没有的时候!!! 也许用它更
empty($var)
- “”(空字符串)
- 0(0作为整数)
- 0.0(0作为浮点数)
- “0”(0作为字符串)
- 空的
- 假的
- array()(空数组)
- $var;(声明了一个变量,但没有值)
empty($var)&&$var!=0
但php开发人员为什么要这么做?
我认为这很荒谬,希望你有这样的代码:
if (empty($_POST["X"])) {
doSomething();
}
我认为“0”
不是空的,空的是什么都没有的时候!!!
也许用它更好
if (isset($x) && x != "") {//for strings
doSomething();
}
empty
转换为布尔值时,以下值被视为FALSE:
- 布尔值本身是假的
- 整数0(零)
- 浮动0.0(零)
- 空字符串和字符串“0”
- 零元素数组
strlen($x)
(这特别适合于$\u POST
等源,它们都是字符串值)来确定是否存在非空字符串,包括“0”
我使用的最后一种形式是:
isset($x)和&strlen($x)
,在知道有一些post数据的情况下应用任何附加处理。因为0也意味着false。我不理解否决票,这是一个合法的问题,因为“空”意味着缺少数据,而“0”是一个合法的字符串。我也想知道这背后的原因,因为这就是它的定义。本来可以有所不同,但事实并非如此。有人可能会责怪perl的false-y值转换是灵感的基础。@user2864740原作者和我都明白,问题是为什么empty
是这样定义的,因为“0”
显然不是空的。因为“==0==0.0==0”==null==false==array()=$var
。php是松散类型的。引号的使用主要影响实际值的数据类型。同样值得一提的是,关于布尔,我有一个相同的问题,为什么“0”被计算为假?但没关系,我要用strlen或==“”或其他什么来解决它。。。我想知道为什么php开发人员用这种方式设计phpway@user2961204因为这就是PHP的现状——不需要有理性的理由,选择就是历史。除非找到原始宣言或设计/注释,否则此类决定通常会丢失,因此无法解决问题。每种语言都建立了真/假-y值,有些比其他语言更严格:例如Python/Ruby采用了更窄的假-y值定义。我怀疑PHP受到Perl(当时的主要竞争对手)的严重影响,而Perl已经受到了影响。