参数先后顺序,封装函数的时候你关注吗?
在前后端分离大行其道的时代,后端开发 API 接口返回 JSON 数据几乎是每个程序员的日常。而大多数项目都会封装一个返回 JSON 的函数或者对象,具体返回数据如下:
{
"code": 200,
"message": "success",
"data": {
"users": [
{
"id": 11,
},
{
"id": 10,
}
],
"is_show": 1
}
}
而我接手过的项目,封装的函数几乎都乱来的,本来一个很简单的功能,把代码写得非常复杂,非常不容易扩展,调用函数传参数时而传数组,时而传字符串,时而传整型,然后在方法体里面写各种逻辑判断,比如以下示例:
函数内容
function response_json($data, $code, $message) {
$arr = [];
if (is_int($data)) {
// 对 $arr 变量进行赋值
}
if (!empty($data)) {
// 对 $arr 变量进行赋值
}
if ($code && $message) {
// 对 $arr 变量进行赋值
}
return json_encode($arr);
}
调用
return response_json('ok');
return response_json(200, '成功');
return response_json([], 200, '添加成功');
这样的写法逻辑复杂,代码难以读懂,很多项目会出现封装了多个功能类似函数,就是因为前人写得代码太难用,考虑不周全。而我一般都是这样封装的:
函数内容:
function response_json($code = 200, $message = 'success', $data = []) {
$arr = [
'code' => $code,
'message' => $message,
'data' => $data
];
return json_encode($arr);
}
调用
return response_json(200, '成功');
return response_json(200, '成功', ['id' => 1]);
乍一看,这样写没多大区别,只是把函数参数添加了默认值,调换了一下顺序。这里我解释一下原因:1、大多数时候我们开发 API 接口,并不是每次调用都会返回数据的,比如说添加功能,前端只需要根据自定义业务状态码去判断是否执行成功,那么这个时候我们返回数据的时候就直接传递 code 和 message 参数就可以了,不需要第三个参数。2、如果需要添加返回参数,不要在 data 属性里面的,可以扩展函数,修改为以下示例:
function response_json($code = 200, $message = 'success', $data = [], $others = []) {
$arr = [
'code' => $code,
'message' => $message,
'data' => $data,
'others' => $others
];
return json_encode($arr);
}
这样修改,既不影响原来的功能,也满足了添加参数的要求。
全文完。
打赏作者
您将是第一位评论人!