Есть некоторые проблемы с вашим кодом, и одна из них выдаст «Исправляемую фатальную ошибку».Давайте начнем с вызова метода:
- Вы передаете
$data
в качестве параметра, но он не был создан (по крайней мере, в разделе размещенного кода).Это вызовет E_NOTICE. - Вы присваиваете переменную методу void, поскольку
list_targets($data)
не возвращает никаких данных.Если вы в дальнейшем получите к нему доступ, это может дать вам неожиданные результаты. - Возможность смешивания по ссылке / по переменной: вы передаете переменную
$data
(как упомянуто выше, не установлено ранее) и присваиваете значенияк нему, используя $data = $this->$json->results;
.Если в определении функции нет амперсанда, предшествующего параметру (например, function returnByRef(&$varName)
), параметр не может быть изменен в области действия функции и будет таким же, как был передан в функцию. - Наконец, эта строка содержитошибка, которая вызывает исключение:
$json = json_decode($this->result->getBody());
$data = $this->$json->results;
- Вы декодируете результат
result->getBody()
и присваиваете ему $json
.Теперь это будет объект, массив или переменная, в зависимости от возвращаемых данных. - В следующей строке вы пытаетесь получить доступ к области видимости экземпляра класса
$this
и попытаетесь получить доступ к ее свойству $json
.Не только это, вы приковываете к нему вызов метода.Это свойство не было установлено (и я бы настоятельно рекомендовал не использовать «переменные переменные», такие как $this->$property
), поэтому вы сейчас вызываете метод для необъекта.Правильная переменная была бы локальной переменной $json
.
Измененный код
На самом деле вам нужно будет только вернуть декодированный JSON следующим образом:
if (200 == $this->result->getStatus()) {
return json_decode($this->result->getBody());
} else {
return FALSE;
}
Если честно - и комментарии будут высоко оценены - я все еще удивляюсь, почему это приводит к тому, что "не удалось преобразовать в строку" ошибка.Единственная идея состоит в том, что возбужденное исключение каким-то образом пытается вызвать __toString()
для необъекта.