Исправимая фатальная ошибка: объект класса stdClass не может быть преобразован в строку в C: \ xampp \ htdocs \ vufo \ vuforiaApi.php в строке 208 - PullRequest
0 голосов
/ 25 июня 2019

Я хочу создать данные CRUD JSON в таблице. Я хочу отправить переменную в client.php и создать таблицу в другом php-файле, но в клиентском PHP я хочу проверить эхо-переменную. этот код запускается, если я печатаю переменную из функции

Строка 208 - это функции list_targets ($ data)

Это vuforiaapi.php:

class VuforiaCloud
{
    # Cloud server secret and access codes
    private $secret;

    private $access;

    # Request object to be used across methods
    private $request;

    public $result;

    # Constants
    const URL = "https://vws.vuforia.com";

    public function __construct($access, $secret)
    {
        $this->secret = $secret;
        $this->access = $access;
        $this->result = null;
    }

    public function list_targets($data)
    {
        $requestPath = "/targets";
        $this->init_get_request();
        $this->request->setURL(VuforiaCloud::URL . $requestPath);
        $this->build_headers_request();
        try {
            $this->result = $this->request->send();
            if (200 == $this->result->getStatus()) {
                $json = json_decode($this->result->getBody());
                $data = $this->$json->results;
            }
        } catch (HTTP_Request2_Exception $e) {
            echo '<h2>Fatal error! HTTP_Request2_Exception</h2>';
        }
    }

    // ...
}

Этот класс клиента:

<?php 
require_once 'vuforiaApi.php';
$access = "mycodeacces";
$secret = "mycodeacces";
$api = new VuforiaCloud($access, $secret);

$array = $api->list_targets($data);
?>

Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

Есть некоторые проблемы с вашим кодом, и одна из них выдаст «Исправляемую фатальную ошибку».Давайте начнем с вызова метода:

  1. Вы передаете $data в качестве параметра, но он не был создан (по крайней мере, в разделе размещенного кода).Это вызовет E_NOTICE.
  2. Вы присваиваете переменную методу void, поскольку list_targets($data) не возвращает никаких данных.Если вы в дальнейшем получите к нему доступ, это может дать вам неожиданные результаты.
  3. Возможность смешивания по ссылке / по переменной: вы передаете переменную $data (как упомянуто выше, не установлено ранее) и присваиваете значенияк нему, используя $data = $this->$json->results;.Если в определении функции нет амперсанда, предшествующего параметру (например, function returnByRef(&$varName)), параметр не может быть изменен в области действия функции и будет таким же, как был передан в функцию.
  4. Наконец, эта строка содержитошибка, которая вызывает исключение:
  $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() для необъекта.

0 голосов
/ 25 июня 2019

Вы не должны повторять результат. Вместо этого используйте оператор return для возврата результата метода / функции.

$this->result = $this->request->send();
$status = $this->result->getStatus();
if ($status == 200) {
    $json = json_decode($this->result->getBody());

    return $json;
}

throw new RuntimeException('Request failed with status code: ' . $status);
...