PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (22): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 329
MAXUS Отправлено: 10 Августа, 2015 - 12:06:52 • Тема: class_exists загружает класс • Форум: Объектно-ориентированное программирование

Ответов: 11
Просмотров: 2867
Мелкий пишет:
MAXUS пишет:
if (version_compare(phpversion(), '5.3.0', '>='))

MAXUS пишет:
__DIR__

Вы уж определитесь: или реально писать и тестировать код на всякой фигне или же выкидывать ненужный код сразу, дабы не засорять.

MAXUS пишет:
при организации динамического кэша.

Стукните по башке архитектору томиком GoF (или ещё чем тематическим) и используйте адекватные задаче шаблоны проектирования.


Ну, то что __DIR__ в 5.2 не работает это понятно. Просто кусок кода выдрал из того, что под 5.2 тоже должно работать.

А насчет шаблонов. Можно непосредственно мне по башке стукнуть и подсказать, какой адекватный шаблон использовать для кэширования в шаблонизаторе?

Опишу задачу.

Есть файл вида (HTML со вставками кода шаблонизатора). Он парсится и создается файл с классом с определенным именем в папке с кэшем (назовем это так).
При запуске страницы сначала проверяется скомпилированный кэш-файл с классом. Если его нет или он протух (определяется по нескольким параметрам, не только по времени файла), то файл вида перекомпилируется.
После этого используется скомпилированный класс.

Прям любопытно стало, это стандартная смс была, которая автоматически постится, типа "я занят" насчет шаблонов или что-то конкретное имеется в виду и есть какой-то шаблон, который решает задачу?

Дополнение

ЗЫ Мне кажется, что количество невинно убиенных томиком GoF в мире (или только в России) растет неоправданно быстрыми темпамиУлыбка
MAXUS Отправлено: 10 Августа, 2015 - 08:59:14 • Тема: class_exists загружает класс • Форум: Объектно-ориентированное программирование

Ответов: 11
Просмотров: 2867
DeepVarvar пишет:
MAXUS пишет:
есть ли файл и не устарел ли он

http://php.net/manual/ru/function.filemtime.php


Да это-то понятноУлыбка
MAXUS Отправлено: 10 Августа, 2015 - 08:46:50 • Тема: class_exists загружает класс • Форум: Объектно-ориентированное программирование

Ответов: 11
Просмотров: 2867
DeepVarvar пишет:
http://php.net/manual/ru/functio...class-exists.php

Цитата:
bool class_exists ( string $class_name [, bool $autoload = true ] )

Цитата:
Список параметров

class_name
Имя класса. Воспринимается без учета регистра.

autoload
Вызывать ли по умолчанию __autoload.


Там фишка в том, что я при помощи class_exists по сути проверял наличие файла. У меня идет проверка есть ли файл и не устарел ли он. Но вместо file_exists я наивный хотел использовать более 'целевую' функцию class_exists, но оказалось, что был не прав.

В принципе, если бы не надо было проверять не устарел ли файл, то я бы воспользовался флагом autoload в class_exists, но у меня, если файл устарел, его надо поменять и только после этого он используется и, соответственно, загружается.
MAXUS Отправлено: 10 Августа, 2015 - 08:21:42 • Тема: class_exists загружает класс • Форум: Объектно-ориентированное программирование

Ответов: 11
Просмотров: 2867
Столкнулся с интересным нюансом при организации динамического кэша.

При использовании автозагрузки классов всем известная функция class_exists(), которая должна проверять, существует ли класс, не просто проверяет, но и загружает класс. Выявляется это и несколько вводит в заблуждение, если после вызова функции динамически изменить класс, т.е. переписать файл.

PHP:
скопировать код в буфер обмена
  1. function autoload($class_name){
  2.         require_once(__DIR__ . DIRECTORY_SEPARATOR . $class_name . '.php');
  3. }
  4.  
  5. if (version_compare(phpversion(), '5.3.0', '>=')) spl_autoload_register('autoload',true,false);
  6. else spl_autoload_register('autoload',true);
  7.  
  8. file_put_contents(
  9.         __DIR__ . DIRECTORY_SEPARATOR . 'some_class.php',
  10.         '<?
  11.         class some_class{
  12.                         public function __construct(){
  13.                                 echo 1;
  14.                         }
  15.                 }
  16.         ?>'
  17. );
  18. if( class_exists('some_class') ) echo 'Класс some_class существует, ';
  19. file_put_contents(
  20.         __DIR__ . DIRECTORY_SEPARATOR . 'some_class.php',
  21.         '<?
  22.         class some_class{
  23.                         public function __construct(){
  24.                                 echo 2;
  25.                         }
  26.                 }
  27.         ?>'
  28. );
  29. $some_class = new some_class();


Вместо ожидаемого (мнойУлыбка) 'Класс some_class существует, 2', на экран выводится 'Класс some_class существует, 1'...

В принципе, ничего удивительного тут нет и логика понятна. Class_exists() проверяет наличие класса, т.е. был ли он загружен, при этом при обращении к классу происходит его автозагрузка. Далее динамические изменения файла уже ни на что не влияют, т.к. файл в новом виде уже не подгружается и используется старый класс.

Просто делюсьУлыбка
MAXUS Отправлено: 19 Мая, 2015 - 06:13:58 • Тема: Проксирующий/кэширующий "сервер" • Форум: Вопросы новичков

Ответов: 37
Просмотров: 1918
А что за медиаконтент? Не видео?
MAXUS Отправлено: 17 Мая, 2015 - 20:36:20 • Тема: Где я поворачиваю не туда? • Форум: Регулярные выражения

Ответов: 4
Просмотров: 360
/^<span[^>]*>\s*([^<]*)\s*<\/span>[^<]*<span[^>]*>\s*([^<]*)\s*<\/span>/i

Попробуй. Не проверял, но должно сработать.
MAXUS Отправлено: 16 Мая, 2015 - 08:57:25 • Тема: Автосоздание рядов в MySQL возможно? • Форум: SQL и Архитектура БД

Ответов: 11
Просмотров: 119
pps88 пишет:

Из-за того что база будет достаточно большая - стараюсь избежать JOINов с заботой о производительности.


Тебе совершенно верно подсказал IllusionMH. Послушай умного совета. А Join не будет напрягать базу, если ты индексы правильно составишь.

У тебя есть две таблицы с уникальными индексами: Фильмы и Продюсеры. Фильмы не могут дублироваться (id - Primary key), Продюсеры не могут дублироваться (id - Primary key). Третья таблица будет содержать id продюсера и id фильма и поскольку это индексированные поля, то JOIN вообще не будет напрягать выборку.

А то, как ты собираешься свою проблему решать, приведет к хаосу в таблице, в том числе увеличит ее размер на диске.
MAXUS Отправлено: 16 Мая, 2015 - 08:43:08 • Тема: Выполнить скрипт после заверщения другого скрипта • Форум: Вопросы новичков

Ответов: 7
Просмотров: 452
Serhio пишет:
Всем привет!

Первый скрипт выполняет передачу данных ассинхронно.
При клике на кнопку начинает выполняться второй скрипт, который считывает результат выполнения первого скрипта, но первый скрипт не закончил свое выполнение на 100%. В результате второй скрипт считал не полную информацию

Есть для такой ситуации что-нибудь аля $(document).ready()?


1. А насколько, в принципе, оправдано наличие кнопки, которая запускает второй скрипт?
1.1 Можно ведь инициировать запуск второго скрипта после того, как выполнится первый. Даже при асинхронном запросе.
1.2 Ну, или по завершению первого скрипта создавать объект с полученными данными, а по нажатию на кнопку второго скрипта проверять наличие этого объекта и запускать второй скрипт только если этот объект существует.

2. А кнопку при генерации рисуй сразу с атрибутом disabled, а по выполнению первого скрипта удаляй этот атрибут. Только в этом случае см. п.1Улыбка
MAXUS Отправлено: 16 Мая, 2015 - 08:16:56 • Тема: Оптимизация категоризированного поиска товаров. • Форум: Хранение данных, их вывод и обработка

Ответов: 24
Просмотров: 3681
Sheehave пишет:

Каждый пункт слева добавляет что-то к фильтру - и на каждый новый запрос, о чём я и написал в первом вопросе. В сумме их и выходит 30-80 штук.


А ты можешь ТЗ поподробнее сформулировать? Простыми словами, что конкретно требуется? Без привязки к реализации. Типа сначала слева категории такие-то. В листинге соответственно картинки. Ткнули на картинку, как должна изменяться менюха слева и что должны получить в листинге? И т.д. Просто заинтересовала задача. Интуиция подсказывает, что ход мыслей не правильный. 80 запросов - этому явный признак.
MAXUS Отправлено: 15 Мая, 2015 - 21:09:33 • Тема: SMS сервис • Форум: Прочее

Ответов: 9
Просмотров: 92
LIME пишет:
Спасибо всем конечно и низкий поклон, но смотрите что ли на даты.


Вообще странно, что в ветке 11 года можно что-то написать.
MAXUS Отправлено: 15 Мая, 2015 - 20:49:51 • Тема: SMS сервис • Форум: Прочее

Ответов: 9
Просмотров: 92
LIME пишет:
может кто-нибудь посоветовать хороший смс сервис?
которым пользовался
около 10 000 смс в месяц


http://smsc[dot]ru/

Простой как валенок и надежный. Платный тока само собой.

ЗЫ. А че топик так подняли? starskey рекламку запостил?
MAXUS Отправлено: 15 Мая, 2015 - 20:29:37 • Тема: Оптимизация категоризированного поиска товаров. • Форум: Хранение данных, их вывод и обработка

Ответов: 24
Просмотров: 3681
Sheehave пишет:
По результатам тестов могу сказать, что реализация на джойнах не даёт существенного преимущества, а вот вариант Мелкий с групповыми функциями и хевингами действительно работает в 2 раза быстрее - за что ему большое спасибо Улыбка


Вопросы:

1. Так надо, что все запросы в body видны?
2. Если я правильно понимаю, слева в меню все равно количество товаров в категории выводится без учета текущих фильтров. Зачем тогда огород городить? Просто создать таблицу, в которой фиксировать количество товара в категории. Принцип лучше посчитать один раз и сохранить, чем каждый раз пересчитывать. Летать будет.

ЗЫ Да и с комбинациями категорий теоретически можно заморочиться. Как вариант... В таблице, которая хранит количество товаров по категории, ключ делаешь хэшем из комбинации категорий. Сохраняешь при записи товарной позиции (или при присвоении товару категории).
Типа hash = для сына+солидный+на день рождения. Только при создании ключа сортируешь свойства определенным образом. Например, по алфавиту. Тогда hash в примере перестроится на для сына+на день рождения+солидный...

ЗЗЫ А вообще, судя по тому, что у тебя в body генерится более 80 запросов, ты что-то явно делаешь не так и оптимизация заключается как раз в том, чтобы этот косяк выкупить. Подозреваю, что после этого у тебя и без специальных таблиц летать будет.
MAXUS Отправлено: 13 Мая, 2015 - 20:04:07 • Тема: вызов по необходимости • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 2198
Sail пишет:
Ну и всё-таки ещё разок про определённость и доступность...


Да я ведь и не спорю. Просто речь была о кэше и о предложении реализовать его через __get(). Я просто отметил, что эту особенность надо учитывать. А так, кмк, это типичный реестр с некоторыми нюансами.
MAXUS Отправлено: 13 Мая, 2015 - 15:27:27 • Тема: вызов по необходимости • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 2198
Sail пишет:
MAXUS, для ясности:


Мне это и так ясноУлыбка См. выше.
MAXUS Отправлено: 13 Мая, 2015 - 15:14:58 • Тема: вызов по необходимости • Форум: Объектно-ориентированное программирование

Ответов: 12
Просмотров: 2198
Sail пишет:
В первом случае - не определена и, следовательно, не доступна; во втором - определена и доступна (поскольку public).


Ну дак. А я о чем говорю? Соответственно, если свойство определить, то __get() не отработает. Соответственно, в случае с задачей создать кэш объекта надо это учитывать. Синглтон так создать можно, а вот кэшировать не получится.

ЗЫ
Sail пишет: после echo в 7 и 9-й строчках Улыбка


Ну и ты вот скажи, удобно читать вывод var_dump без тэга <pre>? Я может чего не понимаю, вполне допускаю это, но в данном случае идет вывод string и особой роли не играет. А меня лично напрягает постоянно в примерах дописывать <pre> и </pre>... А по иному читать вывод не удобно. В данном случае скопипастил код, запустил и все понял без дополнительных изощрений. Или я не прав?

Страниц (22): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB