PHP的===操作符似乎是区分大小写的。那么,是否有理由使用strcmp()呢?
做下面这样的事情安全吗?
if ($password === $password2) { ... }
PHP的===操作符似乎是区分大小写的。那么,是否有理由使用strcmp()呢?
做下面这样的事情安全吗?
if ($password === $password2) { ... }
当前回答
永远不要使用==进行字符串比较。===是可以的。
$something = 0;
echo ('password123' == $something) ? 'true' : 'false';
只要运行上面的代码,你就会明白为什么。
$something = 0;
echo ('password123' === $something) ? 'true' : 'false';
现在好一点了。
其他回答
Strcmp()和===都是区分大小写的,但是===更快。
示例代码:Speed Test: strcmp vs ===
永远不要使用==进行字符串比较。===是可以的。
$something = 0;
echo ('password123' == $something) ? 'true' : 'false';
只要运行上面的代码,你就会明白为什么。
$something = 0;
echo ('password123' === $something) ? 'true' : 'false';
现在好一点了。
使用==可能很危险。
注意,如果这两种数据类型不同,它会将变量强制转换为另一种数据类型。
例子:
Echo (1 == '1') ?'true': 'false'; Echo (1 == true) ?'true': 'false';
正如您所看到的,这两个是来自不同类型的,但结果为真,这可能不是您的代码所期望的。
但是,建议使用===,因为测试表明它比strcmp()及其不区分大小写的替代方案strcasecmp()快一些。
在谷歌上快速搜索一下,可以找到这个速度对比:http://snipplr.com/view/758/
在PHP中,不使用字母排序,而是使用字符的ASCII值进行比较。
小写字母的ASCII值比大写字母高。最好使用恒等运算符===来进行这种比较。Strcmp()是一个执行二进制安全字符串比较的函数。它接受两个字符串作为参数,如果str1小于str2则返回< 0;>如果str1大于str2则为0,如果相等则为0。还有一个不区分大小写的版本,名为strcasecmp(),它首先将字符串转换为小写字母,然后进行比较。
总结所有答案:
==对于字符串比较来说是一个坏主意。 在许多情况下,它会给你“令人惊讶”的结果。不要相信它。 ===很好,会给你最好的表现。 如果需要确定哪个字符串“更大”,则应该使用Strcmp(),通常用于排序操作。