PHP中无法识别对象存在

时间:2012-12-26 11:38:55

标签: php mongodb if-statement null

我有以下脚本:

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从db返回正确的对象,否则返回NULL。问题是在var_dump之后的if语句中总是返回false!

我缺少什么?提前谢谢。

3 个答案:

答案 0 :(得分:0)

If (isset($login)){
   //do what you need
}

答案 1 :(得分:0)

if($login != NULL){
return (string)$login['_id'];
}else{
return false;
}

我遇到了这样一个问题,这个问题很有效,而且它正在发挥作用。

答案 2 :(得分:0)

尝试将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,但可能会发出警告(不确定)。
顺便说一句:尝试将您的ini文件设置为{{1也许这会给你一些关于出了什么问题的线索。

根据您在评论中发布的内容以及查看代码,此行:E_STRICT | E_ALL实际上是将对象转换为字符串。结果如下:

return (string)$login['_id'];

你正在使用array(5) { ["_id"]=> object(MongoId)#8 (1) //<-- OBJECT { ["$id"]=> string(24) "50d19fed9cc2318521000001" } } 演员,感觉不对正如Sammaye所指出的,那应该是正常的。你投了太多BTW:(string)"$foo"投射到一个字符串,因为双引号,不需要额外的演员......但这不是重点...无论如何,试试这个:

$foo

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

PS:使用getter方法可能更干净:

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

祝你好运,快乐编码