В общем завершил ядро одной суперсистемки на пыхпыхе. Получилось очень аккуратно, фичасто и компактно. Побил рекорд по размерам index.php:
<?php
require("core.php");
require("base_module.php");
Core::Run();
?>
Теперь я мегакрутой пыхпыхбыдлокодер. Говоря о практическом применении... Я писал это чудо под себя, для своего сайта. Чтобы было удобно расширять и изменять (нынешний движок X-Post хоть и модулен, но имеет слишком большой базовый функционал и слишком низкие уровни абстракции межкомпонентного взаимодействия; шаблонная система - дурацкая и неудобная для меня, почти как в IPB; поддержки i18n нет вообще).
Всё получилось так, как я и задумывал в архитектурном плане; в основе - модули, все модули наследуются от одного класса, что обеспечивает единые интерфейсы для связи ядро-модули, у каждого модуля - свои шаблоны, языковые файлы. Базовый модуль выполнен в виде абстрактного класса. Вообще вся система по полной использует последние возможности PHP 5 в области работы с классами.
Используется много XML (в том числе ради возможности использования DTD для контроля за содержимым), разумеется, с кэшированием... Ядро только работает с модулями, отслеживает зависимости, вызывает стандартные методы модулей, кэширует, что ему подсунешь, обеспечивает несколько методов для парсинга XML, плюс добавление/удаление модулей с учётом зависимостей (хотя это я толком не внедрил пока, только в планах). Информация об установленных модулях и их настройки хранятся в едином XML-файле, что позволяет организовывать различные интерфейсы для управления системой и, опять же, использовать единый механизм доступа к модулям. Славно, легковесно. Это хороший опыт.
Сейчас дилемма: развивать и строить что-то действующее на базе написанной системы или перейти к другим технологиям (но тогда жалко забрасывать написанное).
PHP для меня уже не так интересен.
Думаю, может отдать кому сырец?
Вчера напоролся на http://bugs.php.net/bug.php?id=28444.
В одном месте пробегал по аттрибутам DOM-ноды (из расширения DOM ):
foreach ( $Module->attributes as $Attribute )
{
/// ...stuff...
}
На локальной машине у меня PHP 5.1.2, всё работает, аттрибуты разбираются.
Залил на хостинг и получил по кумполу: "Cannot access undefined property for object with overloaded property access".
Минут сорок потратил на дебаг, весь извёлся, в итоге понял, что причина - в пыхпыхе версии 5.0.3 на сервере у хостера. Главное, обновляться они там не собираются :(
Костыль, конечно, нашёл:
for ( $m = 0; $m < $Module->attributes->length; $m++ )
{
$Attribute = $Module->attributes->item ( $m );
...
}
Неприятно =(