当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"
?
答案 0 :(得分:3)
您正在使用三元运算符检查?
之前表达式的真实性。值{em>真实性在Booleans部分中描述:
转换为布尔值时,以下值被视为FALSE:
布尔值FALSE本身
整数0(零)
浮点数0.0(零)
空字符串,字符串" 0"
一个零元素的数组
一个零成员变量的对象(仅限PHP 4)
特殊类型NULL(包括未设置变量)
从空标签创建的SimpleXML对象其他每个值都被视为TRUE(包括任何资源)。
所以是的,字符串"0"
(以及空字符串""
)被视为一种特殊情况。
Perl的Ternary Operator和Truth and Falsehood表现得像PHP(事实上,它是相反的方式)。
答案 1 :(得分:2)
这只是因为PHP中的类型转换。只有两种情况下你有一个空字符串:“”和“0”