Какой из вариантов ниже лучше
Опция 1:
//control file:
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resuts
$results = array();
while ($row = $result->fetch_assoc()) {
$results[] = $row;
}
$smpt->close();
//Note: PHP version < 5.3.0 so I can't use just $results->fetch_all('MYSQLI_ASSOC');
//view file:
foreach($results as $key=>$value) {
//display results
}
unset($results);
Вариант 2:
//control file:
$smpt = $con->query("SELECT id,name FROM customers");
//fetch all resluts
//view file:
while($row = $result->fetch_assoc()) {
//display results
}
$smpt->close();
Я пытаюсь полностью отделить логику от представления … В настоящее время я использую вариант 2, потому что с вариантом 1 сценарий проходит 2 цикла. один для получения данных, а другой для их отображения. Но какой из них лучше использовать?
Спасибо
Опция 1 позволяет повторно использовать $data
переменной, так что вы можете отобразить результаты дважды, но цена этого заключается в том, что у вас может быть большой объем данных, хранящихся в переменной. Вы можете очистить это с помощью unset($data)
как только вы на 100% уверены, что закончили с этим.
Вариант 2 требует меньше циклов (только один вместо двух) и не нуждается в дополнительной переменной для хранения данных. Стоимость этого в том, что while
цикл может быть использован только один раз.
В общей схеме, различия в скорости будут настолько минимальными, что пользователь не заметит их, однако, если в одном скрипте будет более 20 экземпляров, это может оказать заметное влияние.
Я бы посоветовал Вариант 2 при условии, что вам нужно только использовать while
цикл один раз. Кроме того, вы могли бы сравните ваши сценарии чтобы увидеть, как они выступают друг против друга.
Всегда лучше, чтобы взгляды имели дело только с проблемами представления.
Таким образом, из двух упомянутых вами вариантов я бы выбрал вариант 1, чтобы вам не приходилось закрывать $ smpt внутри представления ($ smpt не имеет ничего общего с уровнем представления).