Когда то Кос просил кинуть что то в решения. Вот я написал у себя. Могу кинут в решения. (ps: сорри за черный пиар)
kostyl У тебя удивительный код - вроде phpdoc, красивое форматирование, комментарии, но пока прочитаешь - глаз сломаешь ;-)
kostyl Расцветка хорошая, имена переменных из нескольких слов - это жестко =) Мне больше нравится, как обычно сокращают переменные в cpp Код (Text): $ExpiredPeriod $xpdPd $CallbackData $CbkDt а если писать длиные, то по мне так лучше писать их через подчеркивание Код (Text): $SoonFuseKeyPostfix $soon_fuse_key_postfix
как по мне, так через CamelCase — лучше. Но для переменных и методов лучше $lowerCamelCase. $SoonFuseKeyPostfix — честно, вообще не понимаю, что значит эта переменная. даже гугл выдал: "Вскоре предохранителей Ключевые Postfix" ) Подтвержу, что такое впечатление возникает. Может, не хватает какого-то подсознательного изящества , может всё дело в слишком длинных названиях: Код (Text): IsNeedCreateNewCache -> needNewCahce $ExpiredPeriod -> $expires $SoonFuseKeyPostfix ->$newPostfix PHP: <? if ($CallbackObject) { self::$_CallbackSignature = array($CallbackObject, $CallbackFunction); } else { self::$_CallbackSignature = $CallbackFunction; } // => self::$_CallbackSignature = $CallbackObject ? array($CallbackObject, $CallbackFunction) : $CallbackFunction; Плюс не хватает русских описаний в пхп-доке. Но намного красивее и приятнее смотреть на этот код, чем на код 95% осталных программистов.
согласен, они длинноваты, надо поизящнее... Это все мой монитор, он может вмещать очень длинные строки, поэтому я не особо задумывался надо этим моментом, но я исправлюсь! )) $SoonFuseKeyPostfix - да, жестковато, жестковато...
ну мне понравилось, спасибо) Некоторые моменты не понял (проверка подписи - эт че?) вот как у меня замешан кеш сейчас: PHP: <?php abstract class Collections extends Creators { protected $db; protected $cache; protected $params = array( 'fields' => array('id', 'title'), 'from' => 0, 'count' => 10, 'orderBy' => 'id', 'orderType' => 'DESC' ); protected $filter = false; protected function init() { $this->db = Database::getInstance(); $this->cache = Cache::getInstance(); } public function setPage($from, $count) { $this->params['from'] = $from; $this->params['count'] = $count; return $this; } public function order($field, $type) { $this->params['orderBy'] = $field; $this->params['orderType'] = $type; return $this; } protected function generateHash() { $fields = $this->params['fields']; sort($fields); $filter = $this->filter; $filter = (is_array($filter)) ? $filter : array(); $str = get_called_class() . json_encode($fields) . json_encode($filter); return md5($str); } public function get() { $fields = func_get_args(); if (func_num_args() == 1 && is_array($fields[0])) $fields = $fields[0]; if ($fields) { $defFields = $this->params['fields']; $this->params['fields'] = array(); foreach ($fields as $field) { if (in_array($field = trim($field), $this->alowedFields)) $this->params['fields'][] = $field; } if (!sizeOf($this->params['fields'])) $this->params['fields'] = $defFields; } $hash = $this->generateHash(); try { $result = $this->cache->read($hash); } catch (Exception $e) { $result = $this->makeQuery(); $this->cache->write($hash, $result); } return $result; } } Collections - возможно не совсем верное название. Его у меня используют NewsCollections extends Collections, ContentCollections, GoodsCollections (помните я писал про модуль News? вот это оттуда пошло) http://www.php.ru/forum/viewtopic.php?p=164456#164456 как видно отсюда - кеш у меня очень глубоко зарыт. Кеш-машина - APC. Делать поддержку множества вариантов кеша нужно, но я не настолько богат временем. поддержки тегов нет. А нужно бы. Для меня в идеале было б именовать один и тот же кусок кеш-данных разными именами. Как бы ссылки на него. Ссылка по нескольким тегам и по ключу. Теги - для удаления при обновлении записей, ключ - для получения оного при разных выховах. Сколько можно символов выделить на именование кеша? Если будет тег=32 + ключ=32 + _ - нормально или черезчур много?
не понял о чем ты спросил вообще я советую делать так чтобы было удобно. Но всякое удобство обычно упирается в возможности. Вот в какие возможности упрутся твои 64 символа, я не знаю. По сути скажу что ИМХО это не много, но достаточно. у меня тоже кеш глубоко зарыт и в контроллере и в шаблонизаторе и в бд. Вообщем это нормально - если у двух человек (не у одного, а именно больше чему у одного) кеш зарыт глубоко. )))
CallbackSignature содержит в себе точку входа в процедуру, которая возвращает кешируемые данные данные. Так как это может быть как функция так и метод объекта, поэтому это сигнатура, ну а коллбэк думаю не надо объяснять. Или может я опять не понял? ))
Ну кто, как... Хочу добавить что благодаря Callback у меня политику хеширования возлагает на себя бєкенд, а у тебя непосредственно объект хеширования md5($str); ну это отдельная тема...
да, это сделано специально ввиду сложности подсчета этого хеша. Ну не буду ж я передавать имя класса, $fields, $filters, ...