Ассоциировать массив с объектом больше не дает сбой на false

Я написал некоторый код для извлечения данных из базы данных, а затем возвратил результаты в виде ассоциативного массива, однако я переключил возвращаемое значение на объект (который работает), но он больше не дает сбоя при следующем условии, когда нет результатов.

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 поскольку это стандарт по умолчанию для невыполнения условия.

Заранее спасибо.

1 ответ

Решение

Да, как уже упоминалось в комментариях, объект считается истинным, даже если он пуст.

В качестве альтернативы просто добавьте немного логики:

if (!$records){
    return false;
} else{
    return (object)$records;
}
Другие вопросы по тегам