旗下导航:搜·么
当前位置:网站首页 > PHP教程 > 正文

PHP中“==”的一些坑【php教程】

作者:搜搜PHP网发布时间:2019-12-01分类:PHP教程浏览:70


导读:PHP是弱范例的言语,会自动举行数据范例转换,这无疑给我们的开辟带来了极大的轻易。可现实真是云云吗?本日我们就从==提及。例子起首,看一下这段代码。猜猜看效果会是什么...
PHP 是弱范例的言语,会自动举行数据范例转换,这无疑给我们的开辟带来了极大的轻易。可现实真是云云吗?本日我们就从==提及。

例子

起首,看一下这段代码。猜猜看效果会是什么

<?php
var_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相干学问,请接见ki4网!

以上就是PHP中“==”的一些坑的细致内容,更多请关注ki4网别的相干文章!

标签:PHP