细数那些年PHP我们踩过的 “坑”

    在编写代码的过程中,常常会踩到到各种坑,小坑小错啥的也经常犯,为什么呢?我想主要还是对PHP这门语言的不熟练啊,文档看的少...一些函数用到就查,用不到就烂在手册里了。这篇文章,主要记录一下PHP日常开发中遇到的“坑”(持续更新···)

一、empty

    说起empty,我相信很多人都曾经掉过这个坑里,为什么这么说呢?请看下列代码日常:

 if(!empty(intval($id))) $this->ajaxReturn('404', '数据缺失');

一运行,我去,给我报了一个错:
empty报错

这是什么鬼东西,懵逼.jpg; 一查手册才知道
empty参数官方解释

恍然大悟,噢~原来只能传变量进来。撞墙的心都有了......

二、多层嵌套循环

    最常见变量无预见性复用而不知情问题,代码推荐:

foreach ($arr1 as $key => $value) {
  foreach ($arr2 as $k => $val) {
    foreach ($arr3 as $key => $value) {
      # code...
    }
  }
}

运行一下,不知道问题在哪里,再检查一下运行,怎么还是有问题,慌了、纳闷了...于是,一行一行看代码,终于发现,Excause me?这是什么鬼东西???
foreach之懵逼代码

用了同一个$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标签的完整性,容易导致更多的数据被删除。

暂无评论
  1. 那些丶我无处安放的哀伤 那些丶我无处安放的哀伤

    学习了.

添加新评论