Php 不在对象上下文中时使用$this

Php 不在对象上下文中时使用$this,php,rethinkdb,Php,Rethinkdb,我正在尝试转换一个包含RejectDB datetime对象(由提供)的对象,但遇到一个致命错误,错误是: 不在对象上下文中时使用$this 这是代码的概述: $day = new stdClass; $datetime = new DateTime(); $arrival = r\time( $datetime->format('Y'), $datetime->format('m'), $datetime->format('d'), $dat

我正在尝试转换一个包含RejectDB datetime对象(由提供)的对象,但遇到一个致命错误,错误是:

不在对象上下文中时使用$this

这是代码的概述:

$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\u to\u 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;
}
我不记得这个函数是从哪里来的(不是我的),但它在过去对我很有用

本质上我的问题是,为什么这个
对象到数组
函数会失败?

这是r\time函数返回的(对象):

注意:仅将时间对象转换为数组工作正常,但传递包含时间的对象失败

最终,我需要一个数组用于另一个函数,并且由于其他属性将添加到
day
对象中,因此将其作为一个对象将是有益的。

错误消息

不在对象上下文中使用$this


已经告诉您函数失败的原因。你用这个$这通常在类内部用作对实例化对象的引用,但在您的情况下,您使用的是一个简单的函数,因此没有对象上下文。

您在这里想做什么
$this->getArray($val)
$这是对您所在对象的引用您似乎复制/粘贴了一些代码,并在不更改所有必要位的情况下对其进行了一些更改。将
$this->getArray
替换为
object\u to\u array
,你会没事的。@Wrikken谢谢你,修复了它,我确实复制了这个函数,但它就是这样来的-不过我现在要了解它是如何工作的。我不确定该如何结束此问题等。尽管如此,Mario的回答正确地回答了您的问题“为什么失败”。这与您的问题没有直接关系,但$arrival实际上包含一个查询对象。您仍然需要使用$arrival->run($connection)将其发送到数据库服务器;将其转换为实际的DB时间对象。