在PHP中未识别对象的存在



我有以下脚本:

function canLogin($mail, $password) {
    if( isset($mail, $password) ) {
        $login = dbFind('users', array("mail" => (string)"$mail", "pass" => (string)"$password"), true);
        var_dump($login);
        if($login)
            { return (string)$login['_id']; }
            else { return false; }
    } else { return false; }
}

哪个函数dbfind如下:

function dbFind($collIn, $obj, $one = false) {
    global $db;
    $collection = $db->$collIn;
    if($one == true)
        return $collection->findOne($obj);
        else return $collection->find($obj);
}

现在,您可以从代码的第一个片段中注意到,我正在使用var_dump查看$ login变量的内容,然后检查是否设置。

当我有正确的登录时,var_dump将从数据库返回正确的对象,否则返回null。问题是在if语句中,var_dump始终返回false!

我缺少什么?预先感谢。

If (isset($login)){
   //do what you need
}
if($login != NULL){
return (string)$login['_id'];
}else{
return false;
}

我遇到了这样的问题,而且奏效了。

尝试将if语句更改为以下内容:

if (is_array($login) &&  array_key_exists('_id', $login) && $login['_id'] instanceof MongoId)
{
    //the array_key_exists check could be omitted, but is there just in case
    return (string) $login['_id'];
}

您可以省略前两次检查并使用!empty($login['_id']) && $login['_id'] instanceof MongoId,但是该可能发出警告(不确定)。
btw:尝试将INI文件设置为E_STRICT | E_ALL您还有更多有关出了问题的线索。

根据您在评论中发布的内容,并查看您的代码,这一行:return (string)$login['_id'];实际上是将对象投入到字符串中。结果看起来像这样:

array(5) { ["_id"]=> object(MongoId)#8 (1) //<-- OBJECT
    { ["$id"]=> string(24) "50d19fed9cc2318521000001" } 
}

您正在使用 (string) cast,, sammaye指出的那样,这应该有效
。您正在投入太多的顺便说一句:"$foo"$foo铸成一个字符串,因为双引号,不需要额外的演员...但这不是重点...无论如何,尝试一下:

return $login['id']->{'$id'};//need the single quotes, the property NAME is $id, not id

有关方法/属性和头痛的更多详细信息,请参见Mongoid类上的文档...

ps:使用getter方法可能更清洁:

$login['_id']->getPID();//returns an int, not a string, though

祝你好运,快乐编码

相关内容

  • 没有找到相关文章

最新更新