PHP中那些你不知道的坑,PHP的坑,PHP漏洞
2023-03-31 10:35:07 时间
知乎上任何关于PHP的话题,最后都会变成引战贴,树大招风就是这样。今天长话短说,聊点干货,助你在知乎的PHP话题上不落下风。
- 函数返回参数之坑
通常函数返回的数据类型都是固定的,比如Int,String,Array等。但是PHP不一样,PHP中很多函数返回的数据类型并不固定。
例如
json_decode($a)
函数,正常情况下这个函数能将字符串转换成数组然后返回,但是少数情况下它会放飞自我。比如传入true
会返回true
,传入false
会返回false
,传入NULL
会返回NULL
。就像欢乐农场一样种瓜得瓜,种豆得豆。如果你传入的字符串不是标准JSON格式,或者JSON串的层数超过定义的值,又会返回NULL
。 通俗点说,正常情况下json_decode()
函数会返回数组,其他情况下会返回true
,false
,NULL
。在使用这个函数时不出问题还好,只要一出问题,没认真看文档的人肯定一脸懵。 这种函数还特别多,PHP manual上给这种返回类型起名叫「mixed」,使用时非常考验程序员的风险意识和经验储备。下面就是没考虑风险的情况: $pwd="9527" if (strcmp($_GET['pwd'],$pwd) == 0) { return true; } else { return false; } json_decode($a) json_encode($array)strcmp($a,$b)
函数的返回类型也是mixed,正常情况下会返回int,如果传入的是数组,则返回false
,因为PHP中false
== 0,所以可以绕过。 - json函数之坑
在PHP7.1之后,
json_encode($array)
函数会默认给float类型的数据添加精度。比如数组中有个值是8.6,json_encode
之后会变成8.60000000000001。我遇到时也是一脸懵,好在这个问题可以通过修改配置文件修复,在PHP7.2之后默认关闭了json_encode
函数保留更多精度的开关。只有PHP7.1版本有这个问题。 json_decode($json)函数我之前有一篇文章分析过,存在hash碰撞漏洞,至今未改进。 - 数组类型太少之坑 PHP虽然有数组的概念,但全都是HashTable。你可能想创建一个int型的数组,但是PHP不支持。你想创建一个sting类型的数组,PHP也不支持。虽然在语法上看起来像是int,或者string类型的数组,但底层都是HashTable。这导致PHP在算法优化上的空间非常少,更没有办法基于数组扩展更多高级的数据结构,比如双向链表,红黑树等。虽然基于HashTable也能做,但没人会这样去弄。
至于在知乎上大家说的那些问题,我觉得都不是什么大问题。例如语法不美,速度不快,函数命名不规范……为什么大家都喜欢喷这几点?我猜测是因为这几点容易解释并且不好反驳,比如说$
和->
语法不美,你确实没办法反驳,每个人对美的认知不一样。说速度不快,也有道理,因为再怎么优化都有比你快的编程语言。最后『PHP是世界上最好的语言』
相关文章
- CODING 项目协同 2.0 —— 让协作有条不紊
- viewport深入理解和使用
- 太赞了!英伟达又一突破,输入关键词就可以生成直逼摄影师的大片
- 文本挖掘带你分析苏轼的一生
- 元宇宙中可跨语种交流!Meta 发布新语音模型,支持128种语言无障碍对话
- 2021-11-15:四数相加 II。给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n
- 每天重复这样的Excel操作,写个python脚本多省事!
- 你想打造属于自己的GUI图形化界面吗?看看这个文章!
- 酷炫的迁徙图和轮播图,用pyecharts也可以做出来
- 这136页PDF章章经典,没有学不会的“EXCEL数据透视表”!
- 如何使用vlookup+excel数组公式 完成逆向查找?
- 多线程 | Thread 和 Runnable 执行流程的差异
- 5分钟就能做一个Excel动态图表,你确定不学学?
- 「我读」PL 观点 | 未定义行为有利的一面
- 5个好用的Excel技巧,一秒钟完成一个功能
- 我给pyecharts绘制的“时间轮播图”,加上了好玩儿的“图形标志”!
- 这6款windows办公利器,一定有一款你喜欢的!
- Excel超级表的7个特性,你有必要掌握!
- 我用Excel制作了一枚“电子印章”,太牛逼了!
- 编辑Excel时,断电导致文件没保存,怎么恢复呢?