我在StackOverflow和谷歌上搜索,都找不到这个问题的答案:
我们是否应该总是在PHP中使用三重相等来进行验证?
例如,我有一个变量:
$x = '1';
if($x == 1) // will work
if($x === 1) // will not现在,我的观点是,如果我们需要验证数字字段,如:
if(is_numeric($x) && $x == '1') {将等同于if($x === 1)
既然===也会验证类型,那么我们总是使用===会不会更好呢
发布于 2011-12-18 04:06:50
这完全取决于您正在编写的脚本,没有一个正确的答案。话虽如此,在很多情况下,您还不知道变量的类型(可能用户输入除外)。
这就是我坚持使用==的原因,只有在可能有多种类型的变量时才使用===。
==在大多数情况下都很好,如果你不应该使用它,它就不会被发明:)
发布于 2012-04-12 21:52:30
来自http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/
==没用。
‣,它不是传递性的。"foo“== TRUE和"foo”== 0…但是,当然,TRUE != 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
也就是说,在创建简单表达式时,如果您完全确定类型不是问题,那么根据我的经验,==可以很好地工作。保持警惕就行了。
发布于 2011-12-18 03:56:18
这取决于你想做什么。
考虑到表单中的数据是以字符串形式出现的,==非常方便,因为它可以将表示数字的字符串与数字进行比较,而无需额外的类型转换。
if ($_GET['amount'] == 10) {
//...
}所以不,总是使用===并不是更好。
https://stackoverflow.com/questions/8547487
复制相似问题