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

资源魔 22 0
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相干常识,请拜访PHP中文网!

以上就是PHP中“==”的一些坑的具体内容,更多请存眷资源魔其它相干文章!

标签: php php开发教程 php开发资料 php开发自学

抱歉,评论功能暂时关闭!