php为什么0 ==' somestr'评价为真

时间:2018-05-17 20:55:33

标签: php

我有这段代码:

echo ( $arr['process_refunds'] == 'storecredit' ) ? 'true' : 'false'

$arr['process_refunds']中的值为0类型int(0)

它在php -a中尝试过,如果我们将任何字符串与之比较 == int(0) true评估为 values = [ (1, "David", 501, 2018, "English"), (2, "Nancy", 501, 2018, "English"), (3, "Shyam", 502, 2018, "Hindu"), ] df = sqlContext.createDataFrame(values, ['Id', 'PersonName', 'Dept', 'year', 'Language'])

为什么?

4 个答案:

答案 0 :(得分:5)

这是因为==是一个松散类型的比较运算符。它将您的字符串转换为数字,因此它的计算结果为true。尝试使用===

您的字符串将转换为零,因为它以字母开头。

答案 1 :(得分:3)

我认为很明显松散的比较并没有返回预期值。你可以在这里看到比较表(第二张表)

http://php.net/manual/en/types.comparisons.php

您可以看到这是预期行为。这是因为php在进行评估之前将字符串"php""somestr"转换为匹配数字类型,使其等于0。

enter image description here

除非您有其他类型/条件需要与松散的比较相匹配,否则您应该使用===来确保您具有匹配类型。

答案 2 :(得分:1)

首先:

php -r "echo ( $arr['process_refunds'] == 'storecredit' ) ? 'true' : 'false';"

打印:

false

很明显因为$arr未定义。但如果它的值为0则

php -r "echo ( 0 == 'storecredit' ) ? 'true' : 'false';"

打印:

true

因为0'storecredit'都转换为整数。

(int)'storecredit'的值为0,因为它在字符串的开头不包含任何数字。例如,字符串'4ss'将转换为4。

答案 3 :(得分:0)

你不需要使用===因为这样你比较两个值是相同的类型和相同的内容;示例

echo 0 === 'somstr'; // returns false

echo 0 == 'somstr';  //return true