2012-01-09 31 views

回答

0

原来,===是有问题的

例如10 === 10将是错误的,如果一个是整数,一个是字符串,即使他们与表单发布可能发生的情况相同。

我使用的解决方案是:

如果( “$ I” == “$ J”)

这样,如果他们是相同的,无论类型,它只是检查

+1

这显示了PHP的相等运算符中的一个误解。 ==检查两个操作数是否相等; 10 ==“10”将返回true。 ===检查两个操作数是否相等,并且是相同类型,因此10 ==“10”将返回false,但是10 === 10将返回true。没有必要在你的'解决方案'中用双引号包装。 – 2012-01-16 09:38:20

+0

我也这么认为。但遇到了一个错误。 x == y给出了错误。添加引号后,它工作。 – 2012-01-16 15:35:49

+0

我不认为这是一个错误,这是由于PHP隐式地转换变量。如果你在命令行运行,你可以看到:'php -r'var_dump((int)'00:15');“'字符串00:15被转换为int(0),然后比较0 0. – 2012-01-16 16:19:40

6

00:15先铸成一个整数再与$i比较。由于intval()(其执行的是铸造)在第一个非数字字符处停止,因此00:15被转换为零,该值等于零。这里没有问题,这是==运营商的工作原理。

如果您想避免投射,请改为使用===

2

使用==这些类型将在它们进行比较之前进行转换。在这种情况下,两者都将转换为整数,并且当您将非数字字符串转换为整数时,可能会导致0

如果您使用===运算符代替,则会得到您期望的结果。

1

字符串和INT比喻为INT的,所以$j转换为0,因为在这里有00

0

不奇怪的所有启动 - 与整数比较字符串时,第一个被强制转换为整数,然后进行比较。使用===进行类型检查,你会看到真正的结果