我有一个对象:
object(stdClass)#27 (1)
{
[0] => object(stdClass)#26 (6)
{
["_id"] => object(MongoId)#24 (1)
{
["$id"] => string(24) "4e6ea439caa47c2c0c000000"
}
["username"] => string(16) "wdfkewkghbrjkghb"
["email"]=> string(24) "wdhbfjkwhegerg@€rg.efg"
["password"]=> string(32) "4297f44b13955235245b2497399d7a93"
["slug"]=> string(16) "wdfkewkghbrjkghb"
["insert_datetime"]=> string(19) "2011-09-13 12:09:49"
}
}
我将此对象分配给$user
。
我无法访问此对象属性,使用$ user-> username因为我收到了消息:
未定义的属性:
stdClass::$username
然后,如果我var_dump(get_object_vars($user))
,则返回一个空数组。
如何获取属性?如果可以避免,我不想使用循环。
过程是这样的:
从mongo_db检索结果:
$returns = array();
while ($documents->hasNext())
{
if ($this->CI->config->item('mongo_return') == 'object')
{
$returns[] = (object) $documents->getNext();
}
if ($this->CI->config->item('mongo_return') == 'array')
{
$returns[] = (array) $documents->getNext();
}
}
if ($this->CI->config->item('mongo_return') == 'object')
{
return (object)$returns;
}
if ($this->CI->config->item('mongo_return') == 'array')
{
return $returns;
}
将数据传递给模型
function populateBy($what = false) {
return $this->mongo_db
->where($what)
->get($this->tb['users']);
}
肯定会在控制器中获取结果:
$what = array(
'email'=>$email,
'password'=>$password,
'confirm'=>'1'
);
$user = $this->model_user->populateBy($what);
答案 0 :(得分:2)
您的username
财产不是您正在寻找的地方。尝试
$username = $user[0]->username;
编辑尝试此操作会给我一些意想不到的结果。我得到"Cannot use object of type stdClass as array"
所以我认为你应该做的是使用foreach
循环
// $users is the object in this sample
foreach($users as $user)
{
$username = $user->username;
}
编辑2 您可以使用get_object_vars
$users = get_object_vars($users);
$username = $users[0]->username;
答案 1 :(得分:2)
正如吉尔登所说,您正在寻找的属性是子对象的属性。但是,他错过了对象属性访问与数组元素访问不同。
您在这里遇到的真正问题是您已将数组转换为对象,现在您拥有了一个数字属性名称。要获取属性,您必须使用$user->0->username
之类的语法,但显然这是无效的,因为0
不是有效的变量名。
如果将对象转换为数组,则结果是一个数组 元素是对象的属性。键是成员变量 名称,有一些值得注意的例外:整数属性 无法访问 [原文如此] ;私有变量具有前缀的类名 变量名;受保护的变量前面有一个'*' 变量名。这些前置值在任一侧都有空字节。 这可能会导致一些意外行为:
函数get_object_vars
再次转换回一个数组,以便出现才能工作,但实际上任何事情都可能发生:行为未指定,因为对象元素在其中无法访问中间阶段。同样,$user->{'0'}->username
可能适合您,但我会避免它。
不幸的是,这意味着您必须更改代码的工作方式:不要将数字索引数组转换为对象。