各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

PHP中“==”的一些坑

管理员 2023-09-05
PHP
127

PHP中“==”的一些坑

内容导读

收集整理的这篇技术教程文章主要介绍了PHP中“==”的一些坑,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1435字,纯文字阅读大概需要3分钟

内容图文

PHP 是弱类型的语言,会自动进行数据类型转换,这无疑给我们的开发带来了极大的方便。可事实真是如此吗?今天我们就从==说起。

例子

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

<?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相关知识,请访问PHP中文网!

以上就是PHP中“==”的一些坑的详细内容。

内容总结

以上是为您收集整理的PHP中“==”的一些坑全部内容,希望文章能够帮你解决PHP中“==”的一些坑所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部