Обновленный PEAR :: Calendar сегодня с v0.52, в основном содержащий тяжелую работу Лоренцо (большое спасибо!). Еще раз напомнил, как важно иметь приличную структуру модульных тестов PHP (плюс писать тесты в первую очередь) — было бы более или менее невозможно поддерживать PEAR :: Calendar без него.
Для PEAR :: Calendar все еще есть некоторые запрошенные функции, такие как добавление некоторого простого способа определить, является ли дата выходным днем (скоро будет), но она достигает точки, где есть все необходимые функции. Будет интересно посмотреть, приведет ли это когда-нибудь к написанию альтернативных «движков вычислений» — теоретически должно быть возможно создать китайский или даже толкинский календарь с ним — «просто» вопрос реализации интерфейса .
Однако большая проблема заключается в производительности — она должна стать быстрее. В частности, для Календаря, который «подключен» к динамическим данным, кэширование может быть сложным, поэтому оно должно работать хорошо, даже когда «повторяется» при каждом запросе.
Сейчас это не совсем медленно, но внутренне может (в зависимости от того, что вы делаете) генерировать много вызовов функций, особенно при использовании декораторов . Некоторые из этих вызовов могут быть обойдены путем прямого доступа к свойствам объекта.
Иначе все еще размышляю о каком-то внутреннем кешировании с использованием сериализации. Одна из проблем здесь заключается в том, что десериализация строки, содержащей объекты, часто может быть медленнее, чем повторное создание их непосредственно из PHP — в этом конкретном случае можно получить хоть немного выигрыша, обходя математику, связанную с датой, которая создает объекты. Другим подходом может быть генерация кода (на самом деле еще не задумывались об этом серьезно). Другая проблема может иметь принципиальное значение для выбора даты — выбор «сливается» с обычной структурой календарных данных, но для целей кэширования он должен быть отдельным — может потребоваться альтернативный механизм выбора.
В любом случае — когда-нибудь это произойдет, а PEAR :: Date_Holidays будет выглядеть так, как будто оно будет принято, коллекция даты и времени PEAR, надеюсь, будет выглядеть довольно привлекательно.