我在StackOverflow和Google上搜索,我找不到这个问题的答案:
在PHP中我们应该总是使用三重相等来进行验证吗?
例如,我有一个变量:$x = '1';
if($x == 1) // will work
if($x === 1) // will not
现在,我的观点是如果我们需要验证像
这样的数字字段: if(is_numeric($x) && $x == '1') {
等于if($x === 1)
由于===
也验证类型,如果我们总是使用===
会更好吗?
From http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
==没用。
它不是及物的。"foo" == TRUE, "foo" == 0…当然,= 0.
‣==在可能的情况下转换为数字,这意味着它在可能的情况下转换为浮点数。那么大的十六进制字符串(比如密码)哈希值)偶尔会比较为真,但它们不是。甚至JavaScript不会这样做。
‣出于同样的原因,"6"= ="6","4.2"= ="4.20","133"= ="0133"。但是请注意,133 != 0133,因为0133是八进制的。
‣===比较值和类型…,对象除外,其中===只有在两个操作数实际上是同一个对象时才为真!对于对象,==比较(每个属性的)值和类型这是===对其他类型所做的事情。什么。
见http://habnab.it/php-table.html
http://phpsadness.com/sad/47和
和http://developers.slashdot.org/comments.pl?sid=204433& cid = 16703529
也就是说,当你绝对确定类型不是一个问题,当你创建简单的表达式,==在我的经验足够好。
这完全取决于你正在编写的脚本,这个问题没有一个正确的答案。话虽如此,在很多情况下,您都不知道变量的类型(可能除了用户输入)。
这就是为什么我坚持使用==
,只有在可能有多种类型的变量时才使用===
的原因。
==
在大多数情况下都很好,如果你不应该使用它,它就不会被发明出来:)
这取决于你想做什么。
考虑到表单中的数据是字符串,==
很方便,因为它可以比较,例如,表示数字的字符串与没有额外类型转换的数字。
if ($_GET['amount'] == 10) {
//...
}
所以,不,总是使用===
不是更好。
if (is_numeric($x) && $x == '1') { ...
在我看来这是多余的。为什么我们需要检查$x
is_numeric
和值'1'
?我们知道'1'
是数字所以如果它等于'1'
那么它一定是数字。你可以使用===
比较:
如果你不介意将其解释为字符串:
if ($x === '1') { ...
或
如果必须将值解释为int
if ((int) $x === 1) { ...
或
如果你不关心实际的类型:
if ($x == '1') { ...
我想说最好总是使用===
,并在您可以证明的情况下删除一个=
。
是的,它是相等的,虽然很奇怪。更好的写法是if(is_numeric($x) && $x == 1)
如果你期望你传递的变量将(并且必须)是整数,那么你应该使用triple equal,如果不是,那么你应该避免使用
虽然,如果你真的想使用===
,那么你应该在这个过程中把变量转换成你想要的类型,就像这个例子:
if ((int) $var === 1)
{
// will return true if the $var is 1
}
如果您想要如此强的验证,那么答案是:是的,绝对使用===
。
==
还做了一些非常奇怪的事情,比如将完全不同的字符串作为相等进行比较,只是因为它们在数值上相等。所以在大多数情况下,===
可能对你来说是一个更好的工具。