PHP弱类型安全问题笔记
一、类型转换问题
<span style="color: #008080;">intval</span><span style="color: #000000;">(); </span><span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('1asdfasd')); <span style="color: #008000;">//</span><span style="color: #008000;">1</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('awqw12')); <span style="color: #008000;">//</span><span style="color: #008000;">0</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(<span style="color: #0000ff;">array</span>())); <span style="color: #008000;">//</span><span style="color: #008000;">0</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(<span style="color: #0000ff;">array</span>('foo','val'))); <span style="color: #008000;">//</span><span style="color: #008000;">1</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>(0x1A)); <span style="color: #008000;">//</span><span style="color: #008000;">26 十六进制转换</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">intval</span>('asdfqwer')); <span style="color: #008000;">//</span><span style="color: #008000;">0</span>
登录后复制
intval 如果转换值为字符串时,不会返回错误,而是返回 0,如果转换值为数组时,有两种情况,转换值为空数组时,则会返回0,否则就会返回 1
注意:php用32位内存来保存一个整数,32位可以表示4294967296个数字,有符号的话就是-2147483647到2147483648;
二、内置函数松散性问题
switch(); $i='3adcd'; switch($i){ case 1: echo 'i is 1'; break; case 2: echo 'i is 2'; break; case 3: echo 'i is 3'; break; default: echo 'i is default'; break; }
登录后复制
以上结果,会进入switch case 3 里面,为什么会这样,如果switch是数字类型的case的判断时,switch会将其中的参数转换为int类,所以上述执行的时候,首先会把$i进行了类型转换,转换结果为3 ,所以。。。
<span style="color: #008080;">in_array</span><span style="color: #000000;">(); </span><span style="color: #800080;">$arr</span> = [0,1,2,3,'test'<span style="color: #000000;">]; </span><span style="color: #008080;">var_dump</span>(<span style="color: #008080;">in_array</span>('abd',<span style="color: #800080;">$arr</span>)); <span style="color: #008000;">//</span><span style="color: #008000;"> true</span> <span style="color: #008080;">var_dump</span>(<span style="color: #008080;">in_array</span>('1bc',<span style="color: #800080;">$arr</span>)); <span style="color: #008000;">//</span><span style="color: #008000;"> true</span>
登录后复制
为什么上面执行结果会是这样的,后面通过查询手册,官方给出的说法是, in_array 默认是走松散比较方式,只比值是否相等,而不比较值的类型是否一样,所以才有上面这种结果,不过可以设置in_array 函数第三个参数,设置为True就是严谨的比较方式。
以上都是我们平常开发需要注意的地方。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
刺客信条阴影:贝壳谜语解决方案
1 周前
By DDD
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
在哪里可以找到原子中的起重机控制钥匙卡
1 周前
By DDD

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)
