PHP的===操作符似乎是区分大小写的。那么,是否有理由使用strcmp()呢?

做下面这样的事情安全吗?

if ($password === $password2) { ... }

当前回答

始终记住,在比较字符串时,应该使用===操作符(严格比较)而不是==操作符(松散比较)。

其他回答

永远不要使用==进行字符串比较。===是可以的。

$something = 0;
echo ('password123' == $something) ? 'true' : 'false';

只要运行上面的代码,你就会明白为什么。

$something = 0;
echo ('password123' === $something) ? 'true' : 'false';

现在好一点了。

不要在PHP中使用==。它不会如你所愿。即使是字符串与字符串进行比较,PHP也会隐式地将它们转换为浮点数,并在它们显示为数值时进行数值比较。

例如,'1e3' == '1000'返回true。您应该使用===代替。

使用它的原因是strcmp

如果str1小于str2则返回< 0;>如果str1大于str2则为0,如果相等则为0。

===只返回true或false,它不会告诉你哪个字符串更大。

使用==可能很危险。

注意,如果这两种数据类型不同,它会将变量强制转换为另一种数据类型。

例子:

Echo (1 == '1') ?'true': 'false'; Echo (1 == true) ?'true': 'false';

正如您所看到的,这两个是来自不同类型的,但结果为真,这可能不是您的代码所期望的。

但是,建议使用===,因为测试表明它比strcmp()及其不区分大小写的替代方案strcasecmp()快一些。

在谷歌上快速搜索一下,可以找到这个速度对比:http://snipplr.com/view/758/

Strcmp()和===都是区分大小写的,但是===更快。

示例代码:Speed Test: strcmp vs ===