使用Guzzle获取数据 - 奇怪的错误

时间:2016-08-29 10:58:37

标签: php laravel guzzle

这是我的代码

public function getAllCountries() {
    $countries = array();
    $response = $this->client->get($this->geoCountryAPIURL, [
        'query' => ['username' => $this->username]
    ]);
    $body = json_decode($response->getBody()->getContents());
    if ($response->getStatusCode() == 200) {
        if (array_key_exists('geonames', $body)) {
            $dataRespone = $body->geonames;
            // error or status response
            foreach ($dataRespone as $country)
            {
                $countries[] = array(
                    'geonameId' => $country->geonameId,
                    'countryName' => $country->countryName
                );
            }
        }
    }
    return $countries;
}

在我的PHP错误日志中,我收到此错误:

  

PHP致命错误:不能在第35行使用stdClass类型的对象作为数组

第35行

if ($response->getStatusCode() == 200) {

1 个答案:

答案 0 :(得分:0)

json_decode()会返回一个对象,除非您将true作为第二个参数传递。

即使它说错误在第35行,它也可以在下一行。错误消息并不总是100%正确,但通常会为您提供一个良好的起点。

所以,它实际抱怨的路线可能是这样的:

if (array_key_exists('geonames', $body)) {

..因为$body是一个对象。

将该行更改为:

if (property_exists($body, 'geonames)) {

......它应该有用。

您确定:foreach ($dataRespone as $country)是否正确?我不知道响应是什么样的,但是:foreach ($dataRespone->geonames as $country)似乎更有可能。据我所知,你不能循环StdClass - 对象。