参数先后顺序,封装函数的时候你关注吗?

在前后端分离大行其道的时代,后端开发 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);
}

这样修改,既不影响原来的功能,也满足了添加参数的要求。

全文完。

打赏作者

您将是第一位评论人!

提醒
avatar