是指在横向上的短,每行尽量不要超过那条竖线
例如
合理使用continue,return, break,尽早退出循环
例如:
$t_sum = 0;
$t_param = 'xxxx';
for($i = 0; $i < 100; $i++){
if(1 == $i % 2){
if($t_param == 'name'){
$t_sum += $i;
//...更多其他复杂操作
}
}
}
改造后:
$t_sum = 0;
$t_param = 'xxxx';
for($i = 0; $i < 100; $i++){
if(1 != $i % 2){
continue;
}
if($t_param != 'name'){
continue;
}
$t_sum += $i;
//...更多其他复杂操作
}
例子2:
function test_function($vParam){
if('name' == $vParam){
if(...){
//其他操作
}
}
}
改造后:
function test_function($vParam){
if('name' != $vParam){
return;
}
if(...){
//其他操作
}
}
函数的参数尽量简单,不要在参数里面做复杂的取值、比较。
除了链式操作的场景之外,建议都简化参数。
能抽取出来形成一个变量的,就形成一个变量,并加上注释。
理由:减少人的思考,一眼就能明白是什么意思,减少出错的机会。
不好的例子(1):
getUserDataByUserName(getUserNameByUserId(getUserId(), 'GOODS'));
建议的例子:
$tUserId = getUserId();
$tUserName = getUserNameByUserId($tUserId, 'GOODS');
$tUserData = getUserDataByUserName($tUserName);
不好的例子(2):
TestFunction( (($user_type > 100) || ( $param == 'name')) ? 888 : 999, getDataById()['dataList'][0]['user_name'], strtoupper(trim($t_company_name)));
建议写法:
//用户类型数据, 如果用户类型是什么或者参数是什么就得的什么值
$t_user_type_data = (($user_type > 100) || ( $param == 'name')) ? 888 : 999;
//用户名
$t_user_name = getDataById()[0]['dataList'][0]['user_name'];
//大写公司名
$t_uppper_company_name = strtoupper(trim($company_name));
TestFunction($t_param_data, $t_user_name, $t_uppper_company_name);
不好的例子(3):
if(stristr($t_field_type, 'decimal')
|| stristr($t_field_type, 'float')
|| stristr($t_field_type, 'double')
|| stristr($t_field_type, 'number')
|| stristr($t_field_type, 'numeric')){
//...
}
建议写法:
//是小数吗
$t_is_float = stristr($t_field_type, 'decimal')
|| stristr($t_field_type, 'float')
|| stristr($t_field_type, 'double')
|| stristr($t_field_type, 'number')
|| stristr($t_field_type, 'numeric');
if($t_is_float){
//...
}
除了循环变量i,j,k之类的,尽可能的长一点,取有意义的名字
好处:
例如:
不建议的写法:( $sql 重名了)
$sql = 'UPDATE table_1 SET name='xxx' WHERE id = 888';
db()->execute($sql);
$sql = 'SELECT * FROM table_1 ';
db()->query($sql);
建议的写法:
$t_update_sql = 'UPDATE table_1 SET name='xxx' WHERE id = 888';
db()->execute($t_update_sql);
$t_data_sql = 'SELECT * FROM table_1 ';
db()->query($t_data_sql);
理由:
(1) 防止中间被不小心重新赋值了
(2) 防止还要思考是什么意思
$t_param_type = $this->getParamType();
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
if('GOODS' == $t_param_type){
//...
}
建议写法:
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
//...
$t_param_type = $this->getParamType();
if('GOODS' == $t_param_type){
//...
}
本地变量(局部变量): t, 例如 t_user_id
数组可以以arr_开头, 如 arr_users
全局变量:g,例如 g_user_id
函数参数:v,例如 v_user_id
理由:一见到变量名,就知道从哪里来
例如:
if(0 == $t_status){
}
理由: 防止误操作把==写成=
例如:
if($user_id == 88) incOrderNum(88);
建议的写法:
if(88 == $t_user_id){
incOrderNum(88);
}
理由:
防止后添加的语句不属于该判断条件
if($user_id == 88) incOrderNum(88); decWarehouseNum(88);
正确的写法:
if(88 == $t_user_id){
incOrderNum(88);
decWarehouseNum(88);
}
在函数定义前面,输入 /** 然后回车,phpstorm就会自动把注释模板创建好。
对程序员来说,写文档是不喜欢的,如果函数还不加注释,那就太给自己和别人挖坑了。
在复杂的逻辑前面,也要尽量加上注释。
理由:
好记性不如烂笔头。
/**
* 删除动态报表数据
*
* @param $report_id :报表id
* @param $v_pk_rows :待删除的行
* @param $check_online :检查是否在线
*
* @return array
*/
public function delDynReportData(
$report_id,
$v_pk_rows,
$check_online = true
) {
...
}
有些时候一个字符拼写错误,可能导致严重的后果,至少会给其他人造成困惑。
特别是比如把字母l 写成1的。 一个变量名命名错误,其他人用正确的拼写就搜不到这个变量了。
在phpstorm里面,点击菜单Code=>Reformat Code,就可以把代码的缩进整理得井井有条,清清爽爽。