例子
首先,看一下这段代码。猜猜当作果会是什么
<?phpvar_dump(md5('240610708') == md5('QNKCDZO'));var_dump(md5('aabg7XSs') == md5('aabC9RqS'));var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));var_dump('0010e2' == '1e3');var_dump('0x1234Ab' == '1193131');var_dump('0xABCdef' == ' 0xABCdef');var_dump(0 == 'abcdefg');var_dump(1 == '1abcdef');?>
一眼看过,很明显肯定都是false吧,但运行代码后创造全是true!

WTF!
为什么会这样?
开头我已经说过了,PHP 是弱类型的措辞。利用==比拟两个变量时,当有一个变量为整数,其余一个变量也会转换为整数。这也就阐明了,为什么0 == 'abcdefg'和1 == '1abcdef'会成立。
但是,其他的代码呢?字符串难道还会转换?
PHP 手册上为我们供应理解释解释。
If you compare a number with a string or the comparison involves numerical strings, then each string is converted to a number and the comparison performed numerically.
也便是说,如果你比较的两个字符串涉及到数字(如:\公众0\"大众),那么每个字符串都会转换成数字。
在这里,我不得不说:PHP是最好的措辞!
危害
当我们的网站是直接MD5或Sha1加密而没有加盐,恰巧某用户密码加密涉及到数字,那么就有可能被碰撞破解!
办理
1.在开拓过程中尽可能避免利用==判断两个变量的值
2.密码加密最好利用password_hash()或者加盐md5($pwd.$salt)!
以上便是PHP中“==”的一些坑的详细内容,更多请关注其它干系文章!
更多技巧请《转发 + 关注》哦!