PHP&测试时的Perl行为" 0"," -0"," 0.0"," 00",

时间:2014-12-25 11:36:44

标签: php string perl comparison semantics

当PHP / Perl测试值

时,我遇到了这个有趣的行为
print "0"   ? "Yes" : "No"; // => No
print "00"  ? "Yes" : "No"; // => Yes
print "0.0" ? "Yes" : "No"; // => Yes
print "-0"  ? "Yes" : "No"; // => Yes
print "+0"  ? "Yes" : "No"; // => Yes
print "0 "  ? "Yes" : "No"; // => Yes

因此,字符串中的数值似乎并不重要,但字符串"0"有一个特定的情况。

最让我感到惊讶的是,Perl的表现确实相同 为什么字符串的具体情况正好是"0"

2 个答案:

答案 0 :(得分:3)

您正在使用三元运算符检查?之前表达式的真实性。值{em>真实性在Booleans部分中描述:

  

转换为布尔值时,以下值被视为FALSE:

     

布尔值FALSE本身
  整数0(零)
  浮点数0.0(零)
  空字符串,字符串" 0"
  一个零元素的数组
  一个零成员变量的对象(仅限PHP 4)
  特殊类型NULL(包括未设置变量)
  从空标签创建的SimpleXML对象

     

其他每个值都被视为TRUE(包括任何资源)。

所以是的,字符串"0"(以及空字符串"")被视为一种特殊情况。


Perl的Ternary OperatorTruth and Falsehood表现得像PHP(事实上,它是相反的方式)。

答案 1 :(得分:2)

这只是因为PHP中的类型转换。只有两种情况下你有一个空字符串:“”和“0”

http://php.net/manual/en/language.types.boolean.php