Статические переменные в CodeIgniter - PullRequest
0 голосов
/ 14 ноября 2011

Мне нужно сохранить результат в контроллере, возвращаемом моделью.Результаты должны быть сохранены таким образом, чтобы я мог использовать эти данные при вызове второго таймера без вызова модели.Я не хочу помещать данные в сеанс или memcache.Какой самый эффективный способ сделать это?

Ответы [ 4 ]

1 голос
/ 15 ноября 2011

Большинство людей, начинающих с PHP, не называют эти «статические переменные». Вы случайно мигрировали с Java? Это немного сдвиг парадигмы, если вы переключаетесь на HTTP без сохранения состояния - memcached был разработан для этого (хотя я не уверен, что APC или другие кэши opcode были). Сессии на основе файлов cookie были своего рода , предназначенные для этого.

Если вы пытаетесь избежать повторных запросов для одного и того же запроса, положитесь на кеш запросов CI (и кеш запросов вашего сервера баз данных, в этом отношении) или используйте то, что PHP называет «статическими переменными»:

class Some_model extends CI_Model {

    protected static $some_result;

    public function getResult()
    {
        if (empty(self::$some_result))
        {
             self::$some_result = $this->db->get('table')->result();
        }

        return self::$some_result;
    }
}

Возможно, вам придется настроить, если запрос может вернуть пустой, но вы получите точку. Это также несколько не нужно для моделей, так как я не думаю, что вы можете создать более одного экземпляра через CI_Loader в любом случае ...

0 голосов
/ 14 ноября 2011

CI имеет встроенный кэш запросов.Ваш код будет по-прежнему вызывать модель, но база данных не будет запрошена - она ​​будет извлекаться из файла в папке кэша.

0 голосов
/ 15 ноября 2011

Если ваш запрос является общим для всех пользователей, вы можете использовать собственный кэш PHP APC. Дайте ему ключ и позвоните apc_add('myresult', $result);. Вы можете подобрать значение позже, используя apc_fetch('myresult');.

Если это большой объем данных, вы либо хотите снова найти его в базе данных, либо кэшировать, используя некоторую комбинацию сессии, файловой системы, apc, кэша запросов CI или memcached.

Почему отвращение к сеансу или memcached? Я запутался, как вы ожидаете «сохранить» данные, но не хочу использовать два действительно хороших метода для этого.

0 голосов
/ 14 ноября 2011

Я не думаю, что у вас есть лучшие варианты, чем использование DB или Session, или вам следует использовать url-переменные (но это не кажется хорошим решением). Вы когда-нибудь задумывались об использовании данных вспышки воспламенителя кода ? (но это также на основе сессий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...