php编码的一些小规范

本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/104

最近在整理线上的hhvm warning,虽然每天产生百万级别的warning,但是归结起来只有几类warning。这几类warning虽然都是很小的编码细节导致的,但是也记下来供自己之后编码注意。

Invalid argument supplied for foreach()

foreach($a as $val){
//do something
}

foreach是再常见不过的用法,但是当$a不是数组时,就会报出warning,这点占总warning的60%以上:

Warning: Invalid argument supplied for foreach() in /home/work/orp/zyc/a.php on line 7

规范的做法是在foreach前判断$a的类型:

$a = is_array($a) ? $a : array();
foreach($a as $val){
//do something
}

Invalid operand type was used: array_merge expects array(s)

当\(a,\)b不是数组时,就会报出上述的错误。

规范的做法是array_merge前判断\(a与\)b的类型。

$a = is_array($a) ? $a : array();
$b = is_array($b) ? $b : array();
$c = array_merge($a,$b);

in_array() expects parameter 2 to be an array or collection

in_array($ele,$array);

当$array不是数组时,就会报上述错误,解决办法同上。

function expects exactly 2 parameters, 1 given

假设现在有个公共文件common.php,里面定义了一个类和函数:

class Common{
function common($a){
//do something
}
}

现在有个文件调用了common.php里的common函数:

//a.php
$obj = new Common();
$ret = $obj->common(5);

这时,有人修改了common.php,将函数参数多加了一个$b:

class Common{
//add param $b by xxx
function common($a,$b){
//do something
}
}

但是此时作者并不知道有个a.php也调用了这个方法,此时就会报错:

common() expects exactly 2 parameters, 1 given

推荐的修复方案时,之后加函数参数时可以为添加的参数多加一个默认值即可:

class Common{
//add param $b by xxx
function common($a,$b=0){
//do something
}
}
上一篇:poj1436水平可见线


下一篇:linux ubuntu 关于vim得一些基本命令