Есть ли у вас какие-нибудь варианты и предложения решения этой проблемы?
caballero пишет:
и какая проблемма с этим вариантом?
_Dark_ пишет:
Мне (почему-то) кажется, что это не очень хорошо, если потребуется подключить 10 модулей в конструкторе будет 10 получений экземпляров, а число полей класса так же увеличиться на 10.
И орфографию свою проверьте, читать не очень удобно.
private$db;// Это внутренняя переменная в которой будет храниться экземпляр класса Database
publicfunction __construct(){
$this->db= Database::instance();// Помещаем экземпляр класса в $db.
}
publicfunction method1(){
$this->db->query(/* ... */);// Работаем с классом Database. Переменная $db — линк на класс, чтобы не получать каждый раз его экземпляр там где он требуется. Ярлык, сокращение.
Мне (почему-то) кажется, что это не очень хорошо, если потребуется подключить 10 модулей в конструкторе будет 10 получений экземпляров, а число полей класса так же увеличиться на 10.
// Дальше в методах работаем с $this->cache, $this->database и т.д.
}
Мне (почему-то) кажется, что это не очень хорошо, если потребуется подключить 10 модулей в конструкторе будет 10 получений экземпляров, а число полей класса так же увеличиться на 10.
Один из других вариантов было использование целиком статичных классов, где экземпляр собственно и не нужен, но тогда я лишаюсь полноценного ООП, в частности, я не могу пользоваться магическими методами, мне придется определять свои конструкторы, деструкторы и т.п.
Третьим вариантом было использование что-то вроде реестра, чтобы не дергать сами классы инициализировать все необходимое в классе реестра, а оттуда уже брать необходимые экземпляры. Практически тоже самое, что и первый вариант, только работа с единым объектом реестра.
Есть ли у вас какие-нибудь варианты и предложения решения этой проблемы?
Да, на StackOverflow я нашел много подобных вопросов, но внятных ответов, увы, не было, были в основном синглтоны. В одном ответе я видел предложение использовать "Dependency Injection", сколько я не спрашивал у Google так и не получил нужную информацию касательно этого.
Проясните ситуацию, как лучше реализовать это дело?
Желательно с json'ом, который значительно быстрее сериализации, но и сохранить может не всё.
Проверил.
Пара json_encode / json_decode медленнее serialize / unserialize в ~7 раз.
Проверял на примере ассоциативного массива из 700 элементов, содержание ключей и значений — строки.
Насчет хэша в имени понятно, для того, чтобы файл имел корректное имя всегда.
Меня интересует простой кэш данных, я не хочу хранить там никаких страниц и т.д., просто есть операции результат которых изменяется только в определенный момент, я хочу этот результат сохранить и просто загружать его, вместо того, чтобы высчитывать его заново.
chubrick пишет:
И вообще, кэш это не для людей, а для программы, поэтому ему незачем иметь понятное имя.
Мне кажется, что для программы тоже проще просто взять переменную с данными, чем вначале десереализовывать их. Конечно я могу ошибаться.
Доброго времени суток.
Я пишу свою собственную разработку и подошел к моменту когда мне необходимо реализовать кэширование данных в файл, т.к. существуют операции результат которых изменяется не часто и нет необходимости при каждом запуске скрипта проводить обработку данных.
Меня не интересует реализация, у меня вопрос чисто по концепции кэширования.
В различных CMS, скриптах и т.п. кэширование реализуется путем сериализации данных и записи их в файл, при этом файл обычно имеет "необычное" название (обычно хэш ключа, т.е. его название не указывает на его содержание).
Для чтения кэша читается весь файл и десереализуется, после этого возвращается значение.
Я немного не понял: 1. Для чего кэш файлу с сериализованными данными давать такое название? Ведь это занимает время для работы с классом, необходимо высчитать хэш строки.
2. Зачем вообще сериализовывать данные? Почему нельзя создать .php файл с именем ключа, переменной внутри которая будет хранить нужные данные, а для чтения просто подключать файл (require) и получать эту переменную? Все будет работать быстрее, т.к. не надо будет высчитывать хэш ключа, не надо будет тратить время на fopen/fread/filesize, не надо будет десереализовывать данные (особенно заметно, если там хранятся масштабные данные, вроде кэша языковых фраз, количество которых измеряется сотнями).
При инициализации сессии, PHP создает временный файл, в нем хранятся переменные сессии.
Для идентификации пользователя есть два варианта:
1. В cookie пользователю сохраняется его уникальный идентификатор.
2. Если cookie недоступны, идентификатор передается в GET запросе, например,
$error.='Неверное имя! Разрешены буквы русского и латинского алфавита и цифры. Общая длина - 1 - 32 символа.<br />';
}
Проблема:
если в строке есть > 2 русских букв, то возвращается ложь.
Допустим:
wajska172 - ok
162617 - ok
hw1271sah - ok
sha6187йцfhs - ok
iushшщз271g - возвращается false.
В чем ошибка? (Добавление)
Проблему решил добавлением модификатора, указывающего на то, что используется UTF8.
Итого, код регулярки: