有没有办法将 JsonSerializable 对象作为数组参数传递?

Is there a way to pass a JsonSerializable object as an array parameter?

我正在更新 REST Api class;在每个方法的末尾,我必须调用 DoResponse 方法将我作为第一个参数传递的数据转换为 JSON 字符串。

作为要求的一部分,我为每个端点创建了响应对象;所有这些对象都实现了 \JSONSerializable

class CustomResponseObject implements JsonSerializable {
    public function jsonSerialize() {
        return [/*...*/];
    }
}

然后我在 Api 方法中实例化这些对象并将其传递给 DoResponse 函数。

function myApiEndpoint() {
    $res = new CustomResponseObject();
    /*...*/
    return $this->DoResponse($res);
}

问题是,上述方法只接受数组作为第一个参数。

public function DoResponse(array $response = array());

我可以通过传递 $res->jsonSerialize() 来解决这个问题,但是有没有一种方法可以在我将对象传递给 DoResponse 函数时自动对对象进行 jsonSerialize 而不更改底层方法?

最终,我们决定采用的解决方案是将DoResponse()方法的签名和前几行改成这样:

public function DoResponse($response = array()) {
    if($response instanceof JsonSerializable) {
        $response = $response->jsonSerialize();
    }
    if(is_array($response) === false) {
        // Error handling
    }

    // Previous function body.
}

没什么令人兴奋的,但显然目前还没有办法让这个过程完全自动化。