有没有一种方法可以将JsonSerializable对象作为数组参数传递?

时间:2020-02-13 09:15:10

标签: php php-7 php-7.3

我正在更新REST Api类;在每种方法的最后,我必须调用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,而无需更改底层方法?

1 个答案:

答案 0 :(得分:-1)

最后,我们决定采用的解决方案是更改签名和DoResponse()方法的前几行,如下所示:

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

    // Previous function body.
}

没有什么令人兴奋的事情,但是目前看来,没有办法使该过程完全自动化。