Использование $this вне контекста объекта Объект времени RethinkDB

Я пытаюсь преобразовать объект, содержащий объект datetime rethinkdb (предоставленный библиотекой PHP-RQL), но я получаю фатальную ошибку:

Using $this when not in object context

Это обзор кода:

$day = new stdClass;

$datetime = new DateTime();
$arrival = r\time(
    $datetime->format('Y'),
    $datetime->format('m'),
    $datetime->format('d'),
    $datetime->format('H'),
    $datetime->format('i'),
    $datetime->format('s'),
    'Z'
);

$day->arrival = $arrival;

$day = object_to_array($day);

Именно в функции object_to_array() я получаю фатальную ошибку, ее код:

function object_to_array($obj) {
    $array  = array(); // noisy $array does not exist
    $arrObj = is_object($obj) ? get_object_vars($obj) : $obj;
    foreach ($arrObj as $key => $val) {
        $val = (is_array($val) || is_object($val)) ? $this->getArray($val) : $val;
        $array[$key] = $val;
    }
    return $array;
}

Я не помню, откуда я взял эту функцию (она не моя), но в прошлом она хорошо мне служила.

По сути, мой вопрос заключается в том, почему эта функция object_to_array не работает?

Вот что возвращает функция r\time (объект): https://gist.github.com/fenfe1/6676924

Примечание. Преобразование только объекта времени в массив работает нормально, но передача объекта, содержащего время, завершается ошибкой.

В конечном итоге мне нужно получить массив для использования в другой функции, и, поскольку к объекту day будут добавлены другие свойства, было бы полезно сохранить это как объект.


person fenfe1    schedule 23.09.2013    source источник
comment
Что вы пытаетесь сделать здесь? $this->getArray($val) $это ссылка на объект, внутри которого вы находитесь   -  person Sterling Archer    schedule 24.09.2013
comment
Похоже, вы скопировали/вставили какой-то код и несколько изменили его, не изменив все необходимые биты. Замените $this->getArray на object_to_array и все будет в порядке.   -  person Wrikken    schedule 24.09.2013
comment
@Wrikken спасибо, это исправило, я скопировал функцию, но так оно и было - теперь я собираюсь понять, как она работает. Я не уверен, как мне закрыть этот вопрос и т. д., хотя   -  person fenfe1    schedule 24.09.2013
comment
Что ж, ответ Марио правильно отвечает на ваш вопрос, почему это не удается.   -  person Wrikken    schedule 24.09.2013
comment
Это не имеет прямого отношения к вашему вопросу, но $arrival фактически содержит объект запроса RethinkDB. Вам все еще нужно отправить его на сервер RethinkDB, используя $arrival-›run($connection); чтобы преобразовать его в фактический объект времени RethinkDB.   -  person Daniel Mewes    schedule 24.09.2013


Ответы (1)


Сообщение об ошибке

Использование $this вне контекста объекта

уже сообщает вам причину сбоя функции. Вы используете $это. $this обычно используется внутри класса как ссылка на созданный объект, но в вашем случае вы используете простую функцию, поэтому контекст объекта отсутствует.

person Mario A    schedule 23.09.2013