Ваш код - хорошее место для запуска в том смысле, что он выполнит свою работу (более или менее - array_key_exists
будет лучшим выбором, чем isset
здесь, и вы не инициализируете массив явно).
Недостатки такого простого подхода станут очевидными по мере того, как вы будете развивать свой код и начнете нуждаться в большей функциональности для своего уровня кэширования. Множество проблем возникнет из-за того, что к вашему бэк-хранилищу нельзя получить доступ за пределами функции get_user
. Было бы намного лучше упаковать утилиту кэширования в класс, чтобы впоследствии вы могли иметь несколько операций, которые изменяют резервное хранилище. В своей основной форме это будет выглядеть как
class Cache {
private $store = array();
public function get($key, $flush = false) {
// implementation
}
}
Дальнейшим улучшением было бы абстрагирование вашего резервного хранилища (например, в интерфейс ICacheBackingStore
), чтобы вы могли подключить и настроить резервное хранилище для своего кэша динамически (множество вариантов здесь - хранение в базе данных, сериализованные файлы сеанс, memcached или аналогичный). Например:
interface ICacheBackingStore {
function exists($key);
function get($key);
function set($key, $value);
function purge($key);
function getAllKeys();
}
class ArrayBackingStore implements ICacheBackingStore {
private $store = array();
public function exists($key) {
return array_key_exists($this->store, $key);
}
// etc
}
class Cache {
// you can now change/configure how the cache works through one line of code
private $store = new ArrayBackingStore;
public function set($key) {
return $store->get($key);
}
}