Ассоциировать массив с объектом больше не дает сбой на 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;
}