考虑以下PHP语句:
echo ( 0 == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0
第一个将打印1,第二个将打印0.不应该打印0吗?这是预期的行为吗?我猜它是因为第二个是字符串而第一个不是,但我想要另一个答案。
答案 0 :(得分:6)
阅读与==
答案 1 :(得分:3)
在Php空字符串中,NULL和0相等。
在第二种情况下,'0'
是另一个字符串,''
是另一个字符串。所以你得到的结果是假的。
"", 0, "0", False, array(), Null
都被认为是假的。
您可以使用===
使它们与众不同。
答案 2 :(得分:1)
这是正确的行为。 0
等于空字符串以及false
/ null
。
答案 3 :(得分:1)
这是因为第一行没有比较两个相同类型的变量:
echo ( 0 == '' ? 1 : 0); // Output is 1
echo ('0' == '' ? 1 : 0); // Output is 0
请注意以下事项:
echo ( 0 === '' ? 1 : 0); // Output is 0
===
运算符执行类型敏感的等式检查,这似乎是您所期望的。如果两个参数的类型不同,==
将进行一些模糊检查。
您应该查看comparison operators documentation以获取更多信息:
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。
答案 4 :(得分:1)
我认为第一个是将0和空字符串解释为“false”,它们的出现是相同的。 PHP有很多关于它将被解释为真/假的怪癖。 第二个是将字符串'0'与一个空白字符串进行比较,并得出不相等的字符。
为了确保比较实际值,您应该使用===比较
答案 5 :(得分:1)
0 ==''== null
但是'0'是一个字符串。
你最好用 === 来检查0,'0',null
的区别php > var_dump(0);
int(0)
php > var_dump('0');
string(1) "0"
php > var_dump(null);
NULL
php > var_dump('');
string(0) ""
答案 6 :(得分:1)
您可以在此处找到比较逻辑: http://php.net/manual/en/language.operators.comparison.php
Type of Operand 1 Type of Operand 2 Result
null or string string Convert NULL to "", numerical or lexical comparison
string, resource string, resource Translate strings and resources to numbers, usual math
or number or number
这意味着对于'0' == ''
,第一种情况适用,并且使用词汇比较。根据词汇比较,“0”和“”不相等。
对于0 == ''
,第二种情况适用。在这种情况下,''
会转换为数字0
,等于0
。
答案 7 :(得分:0)
'0' == ''
永远都是假的。因为符号'0'
不是空符号。但在PHP 0(零)和空符号是相同的。