У меня есть модель, которая работает с одним пользователем в базе данных.
Он предназначен для внесения множества небольших изменений в пользователя, поэтому вместо многократного запроса к базе данных я решил получить всю информацию о пользователе в конструкторе модели, а затем поработать с этой информацией через оставшуюся часть модель (поэтому вместо обновления базы данных, это будет обновление массива, который я получил). Тогда я бы просто сохранил этот массив обратно в базу данных в деструкторе.
Это отлично работает, но я читал немного больше, и оказалось, что вы не должны запускать какой-либо неочищенный код в деструкторе (именно здесь я выполняю запрос на обновление базы данных). Так что мне было любопытно, есть ли лучший способ сделать это? Мне не хватает лучшего решения?
Спасибо, Макс
EDIT:
Вот пример того, что я делаю (Примечание: это пример класса корзины покупок, а не класса пользователя):
<?php
class cartmodel extends CI_Model
{
private $sessionPrefix = 'Cart_';
private $CartCache = array();
function __construct ()
{
if ($this->session->userdata($this->sessionPrefix.'data') === FALSE)
$this->session->set_userdata($this->sessionPrefix.'data', array());
$this->CartCache = $this->session->userdata($this->sessionPrefix.'data');
parent::__construct();
}
function __destruct ()
{
$this->session->set_userdata($this->sessionPrefix.'data', $this->CartCache);
}
function AddItem ($id, $count)
{
if ($count == 0 || $count == '' || !is_numeric($count))
return;
if (!isset($this->CartCache[$id]))
$this->CartCache[$id] = 0; //Initialize it so that += works
$this->CartCache[$id] += (int)$count;
}
?>