【问题标题】:Assoc array to object no longer fails on false将数组关联到对象不再因错误而失败
【发布时间】:2015-08-18 00:35:55
【问题描述】:

我编写了一些代码从数据库中提取数据,然后将结果作为关联数组返回,但是我将返回值切换为一个对象(有效),但在以下情况下它不再失败结果存在。

if($myobject = MyClass::GetRecords("something")) {
   // this code is now executing all the time
} else {
   // this code no longer executes even when there are no results
}


class MyClass {

    public static function GetRecords($myparam) {
        $cn = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

        $records = Array();
        $query = '
                    SELECT 
                        `' . DB_PREF . 'mytable`.`id`,
                        `' . DB_PREF . 'mytable`.`foo`,
                        `' . DB_PREF . 'mytable`.`bar`
                    FROM
                        `' . DB_PREF . 'mytable`
                    WHERE
                        `' . DB_PREF . 'mytable`.`bar`=?
                ';

        if ($s = $cn->prepare($query)) {
            $s->bind_param('s', $myparam);
            $s->execute();
            $result = $s->get_result();
            while($row = $result->fetch_assoc()) {
                $records[] = $row;
            }

            switch(count($records)) {
                case 0:
                    $records = false;
                    break;
                case 1:
                    $records = $records[0];
                    break;
            }

            $s->close();
        } else {
            // echo $cn->error;
        }

        mysqli_close($cn);
        return (object)$records;
    }

}

如果我使用return $records; 而不是return (object)$records;,则该条件完美运行

为什么这个条件失败或者我应该将$records 设置为什么,以确保当我希望它失败时条件失败(例如,没有从数据库返回记录)。目前,我将$records 设置为false,因为这是失败条件的事实标准。

提前致谢。

【问题讨论】:

  • “为什么这个条件失败”——因为对象总是被认为是布尔值“真”,即使它们是“空的”。
  • @CBroe - 我应该如何将对象设置为失败 - 并检查? $records = empty() + if(!empty($records = MyClass::GetRecords('something')) ??

标签: php mysqli conditional-statements


【解决方案1】:

是的,正如 cmets 中提到的,即使是空的,对象也被认为是真实的。

作为替代,只需添加一些逻辑:

if (!$records){
    return false;
} else{
    return (object)$records;
}

【讨论】:

  • 正在考虑在课堂上使用类似的东西。这行得通。 ty
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多