我在StackOverflow和Google上搜索过,但我找不到这个问题的答案:
我们是否应该始终使用PHP中的三元组进行验证?
例如,我有一个变量:
$x = '1';
if($x == 1) // will work
if($x === 1) // will not
现在,我的观点是,如果我们需要验证数字字段,如:
if(is_numeric($x) && $x == '1') {
将等同于if($x === 1)
由于===
也会验证类型,如果我们始终使用===
会不会更好?
答案 0 :(得分:6)
来自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://developers.slashdot.org/comments.pl?sid=204433&cid=16703529
话虽这么说,当你完全确定在创建简单表达式时类型不是问题,==在我的经验中运作良好。请保持警惕。
答案 1 :(得分:5)
这完全取决于你写的剧本,对此没有一个正确的答案。话虽如此,您并不知道变量的类型(可能除了用户输入之外)的情况并不多。
这就是我坚持使用==
并且只有在可能有多种类型的变量时才使用===
的原因。
==
大部分时间都很好,如果你不应该使用它就不会被发明:)
答案 2 :(得分:3)
这取决于你想做什么
鉴于来自表单,数据以字符串形式出现,==
很方便,因为它可以比较,例如,表示数字的字符串与没有其他类型转换的数字。
if ($_GET['amount'] == 10) {
//...
}
所以不,永远使用===
并不是更好。
答案 3 :(得分:1)
if (is_numeric($x) && $x == '1') { ...
对我来说这看起来多余。为什么我们需要检查$x
is_numeric
和值'1'
?我们知道'1'
是数字,所以如果它等于'1'
那么它必须是数字。
您可以使用===
比较:
如果您将它解释为字符串就可以了:
if ($x === '1') { ...
或
如果您必须将该值解释为int
if ((int) $x === 1) { ...
或
如果您不关心实际类型:
if ($x == '1') { ...
答案 4 :(得分:0)
我认为最好始终使用===
并删除一个=
,以防你认为合理。
是的,它是平等的,虽然很奇怪。更好的写作方式是if(is_numeric($x) && $x == 1)
答案 5 :(得分:0)
如果你期望你传递的变量将(并且必须)是整数,那么你应该使用三倍相等,如果不是,你应该避免这种情况。
虽然,如果你真的想要使用===
,那么你应该将变量转换为你想要的类型,就像这个例子一样:
if ((int) $var === 1)
{
// will return true if the $var is 1
}
答案 6 :(得分:-1)
如果您想要如此强大的验证,那么答案是:是的,绝对使用===
。
==
也会做一些非常奇怪的事情,例如将完全不同的字符串比较为相等,只是因为它们在数值上是等价的。因此,===
在大多数情况下可能会成为更好的工具。