你好,我从API发布请求中得到了一个$response
,下面是$response
LINELINEBotResponse::__set_state(array(
'httpStatus' => 200,
'body' => '{"richMenuId":"richmenu-5a489c22120e48cec70f3c3cd3b318db"}',
'headers' =>
array (
'server' => 'openresty',
'date' => 'Thu, 03 Feb 2022 11:31:51 GMT',
'content-type' => 'application/json',
'content-length' => '58',
'cache-control' => 'no-cache, no-store, max-age=0, must-revalidate',
'expires' => '0',
'pragma' => 'no-cache',
'x-content-type-options' => 'nosniff',
'x-frame-options' => 'DENY',
'x-line-request-id' => '84ababf8-81e9-4cda-aeb0-25d9b44e9b24',
'x-xss-protection' => '1; mode=block',
),
))
有人能告诉我如何访问";richMenuId";从上面的物体?
我尝试按如下方式访问该对象$response->body->richMenuId
这给了我一个错误:
Cannot access private property LINE\LINEBot\Response::$body
我也尝试过使用SO上的答案将对象更改为数组,但无法解决。
这可能是一个棘手的问题,但任何意见都将受到高度赞赏。感谢
解决方案
查看文档,我们看到两种方法:
getRawBody
(https://github.com/line/line-bot-sdk-php/blob/0500634336ec1b524587a978b917b7b3a3679aef/src/LINEBot/Response.php#L74)getJSONDecodedBody
(https://github.com/line/line-bot-sdk-php/blob/0500634336ec1b524587a978b917b7b3a3679aef/src/LINEBot/Response.php#L84)
因此,可以使用$response->getRawBody()
或$response->getJSONDecodedBody()
,这取决于它们中哪一个更符合要求。
未成功的方法
我最初的想法是通过
json_decode(json_encode($response), true)['body']
但这不起作用,private
成员不会生成到JSON中。因此,我的下一个想法是使用反射:
$reflectionClass = new ReflectionClass('LINE\LINEBot\Response');
var_dump($reflectionClass->getProperty('body')->getValue($response));
然而,这也没有到达私人财产。