在编写代码的过程中,常常会踩到到各种坑,小坑小错啥的也经常犯,为什么呢?我想主要还是对PHP这门语言的不熟练啊,文档看的少...一些函数用到就查,用不到就烂在手册里了。这篇文章,主要记录一下PHP日常开发中遇到的“坑”(持续更新···)
一、empty
说起empty,我相信很多人都曾经掉过这个坑里,为什么这么说呢?请看下列代码日常:
if(!empty(intval($id))) $this->ajaxReturn('404', '数据缺失');
一运行,我去,给我报了一个错:
这是什么鬼东西,懵逼.jpg; 一查手册才知道
恍然大悟,噢~原来只能传变量进来。撞墙的心都有了......
二、多层嵌套循环
最常见变量无预见性复用而不知情问题,代码推荐:
foreach ($arr1 as $key => $value) {
foreach ($arr2 as $k => $val) {
foreach ($arr3 as $key => $value) {
# code...
}
}
}
运行一下,不知道问题在哪里,再检查一下运行,怎么还是有问题,慌了、纳闷了...于是,一行一行看代码,终于发现,Excause me?这是什么鬼东西???
用了同一个$key
啊喂,一直覆盖,结果怎么可能对!!!逻辑、马虎能力五五开。
三、设置COOKIE或者session过期时间
就在前两天弄记住密码短时间内免登的时候遇到个问题,问题代码如下:
$timeout = time() + 60 * 60 * 24 * 31;
set_cookie('auth', "123456", $timeout);
大眼一看这也没什么不对啊,其实我就多加了一点东西,我本来是想加过期时间进来的,但是呢,粗心的我把过期截至时间算了进来,这样是不对的。修改后:
$expire= 60 * 60 * 24 * 31;
set_cookie('auth', "123456", $expire);
我把计算过期时间的公式改了一下,把time()
去掉就可以了。后来想了一下,我这个time()
的时间戳计算结果为10位数,估计是过期时间不能接收这么大的数字的缘故吧(这里是有些疑惑的,看了资料说“time()+过期时间”这样的组合是被允许的,但是我这里为什么会报错,暂时不得而知)
四、strip_tag
这个函数有个bug,就是它本身无法验证html标签的完整性,容易导致更多的数据被删除。
学习了.