有没有办法将 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.
}
没什么令人兴奋的,但显然目前还没有办法让这个过程完全自动化。
我正在更新 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.
}
没什么令人兴奋的,但显然目前还没有办法让这个过程完全自动化。