如何减少bug(php 版本)

重点内容变量声明在使用

foreach 循环要注意赋值,特别是里面有if 判断时;
eg :

$arr = [
    ['id'=>1, 'name' => 'hhee'],
    ['id'=>0, 'name' => 'hhee0'],
    ['id'=>3, 'name' => 'hhee0'],
    ['id'=>4, 'name' => 'hhee0'],
]
$result = $temp = array();
foreach($arr as $v){
    $temp['title'] = 'xxx';
    if($v['id']==0){
        $temp['extra'] = 'extra';
    }
    $result[] = $temp;
}

ok 这里就出问题了

$result = [
    ['title' => 'xxx'],
    ['title' => 'xxx', 'extra' => 'extra'],
    ['title' => 'xxx', 'extra' => 'extra'],
    ['title' => 'xxx', 'extra' => 'extra'],
];

这就有可能跟我们预期的不一样了

变量类型,比如count(xx) , 如果xx 不是数组,返回的结果为1,有时候我们从缓存取数据,可能因为key 不存在,返回false , 如果这时候你把它当数组使用,就会出问题

缓存key 不存在,返回false ,如果你业务 存进去就是一个bool ,这时候就会出问题.

array_push( arr,xxx) arr 必须是数组

array_merge 参数必须都是数组,否则报错,如果在生产环境,一般屏蔽了报错,这时候得到的结果就是一个bool 的false

变量比较,php 是弱类型语言,比如

1 == '1'   true
1 == '1a'  true '1a' 会被转换成整型(1),
false == '0'   true
false == '0q'  true

strpos() , 这个函数,可能返回0 ,表示在第0个位置匹配到了子字符串,所以不能直接if(!strpos('xxx','x')){}, 而是 if(strpos('xxx','x')!==false){}

切记 如果要做类型比较的时候,注意类换转换问题

if 做逻辑判断的时候

if(a == 1){
    xxx
}elseif(a == 3){
    xxx
}

这代码可能就会出现bug,最好是补全else这个分支

注意return , 一个方法最好只返回一种数据结构

if(a == 0){
    return 'a';
}elseif(a == 1){
    return array(0,1)
}elseif(a < 0 ){
    return array('ok' => false , 'msg' => 'a 不能是小于0 的数' )
}
return false;

以上这种写法是错误的,调用这个函数的人,就要去判断多种情况,很容易产生bug,应该统一返回的数据结构。 比如 array('ok' => , 'msg' => 'msg' , 'data' => 'data') , 类似这种类型,具体情况具体分析。

try catch 问题

    try{
        DB::beginTrans();
        DB::exec("xxxx");
        DB::exec("xxx");
    }catch(Exception $e){
        DB::rollback();
    }
    DB::commit();

这里要注意,try 里面如果出现异常,那么就会rollback ,事务已经不存在了,这时候在commit 就会出错

代码提交
我们在使用svn , 或者git 的时候,提交的时候一定要注意在检查一遍,因为你在本地开发,可能有些文件需要根据本地环境进行适当修改,如果不小心提交上去了,那么测试环境,肯定会出现错误,如果一不小心合到online版本,那么可能就是个灾难了,线上环境就会出错!(我就差点出现这个错误。还好在性能测试阶段发现了)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值