Не съм, аз от около година пиша сериозно OOP, а и тогава бях позабравил малко линукса (заради едни аудио проекти, трябваше ми боза постоянно и бях занемарил убунтото)... Както и да е.
В момента, както казах, пиша собствен framework като идеята му (поне засега) не е за публично ползване, но нищо не ми пречи да я пусна. Общо взета има доста идеи, взаимствани от kohana и doophp. От кохана дори има някои неща, които съм изкопирал почти дословно, например utf8 функциите. От doohphp всъщност заимствах идеята повечето неща да са singleton и да се зареждат "мързеливо" - демек 1 път и то само когато трябва (ако потрябва).
Има и ORM, който всъщност е проекта phpActiveRecord с някои промени.
Framework-а изисква php 5.3, защото се използват namespaces и някои други нововъведения в 5.3. Главно гоня производителност, че съм се патил от годзилогрухти като zend и cake. Засега с използване на бази данни съм успял да постигна около 50% по-ниска производителност от чисто php, но в момента повечето неща са в разработка и или се зарежда съвсем малко код или не се зарежда нищо... Но ще гледам да не клякам повече от 60-65% под чистото php. При големите рамки разликата е в пъти, обикновено десетки, но не бива да се правят сравнения, тъй като при мен функционалността също е в пъти (десетки) по-малка от големите рамки, а и на мен идеята не ми е да се получи нещо универсално, а да решава точно конкретни задачи.
Всъщност каква ми е идеята - освен производителност, исках да знам на абсолютно всеки ред какво се случва, както се вика на ниво kernel. Не, че не мога във всеки един framework да разбера какво се случва, но общо взето всеки програмист има свой начин на мислене и за мен в доста framework-ове има неща, които са ми абсолютно нелогични, а има фрагменти, които просто не мога да разбера защо са написани точно така...
Другата причина да започна свой framework - трябва ми hmvc, ама не точно. Например на мен ми предстоят няколко идентични уеб приложения - сайт, който рекламира и продава услугата и самата услуга, като всеки потребител има поддомейн (виртуален разбира се)... Например:
http://www.webapp.bg рекламира и продава услугата
ivan.webapp.bg; dragan.webapp.bg - представляват самото уеб приложение
http://www.webapp.bg/admin - 3-то уеб приложение, с които да администрирам потребителите, както и www сайта.
Трябват ми едни и също модели, но различни контролери, темплейти, layout, acl. Дори и различна multilanguage поддръжка, примерно в ivan.webapp.bg и dragan.webapp.bg и
http://www.webapp.bg искам български и английски, а в
http://www.webapp.bg/admin/ не ми трябва.
За целта съм ги разделил на отделни модули, които ползват един framework и едни и същи модели, но останалите ресурси са си за всеки модул отделно. Например:
GeSHi (PHP):
'type' => 'dir',
'path' => '/',
'multi-language' => 'yes'
),
'type' => 'dir',
'path' => '/admin/',
'multi-language' => 'no'
),
'type' => 'subdomain',
'include' => '*',
'exclude' => 'feed',
'multi-language' => 'yes'
)
);
Както се вижда, има 3 модула, като за всеки си има директория със всичките ресурси. "site" се отделя на база път, като пътя е / в
http://www.webapp.bg (webapp.bg). "admin" модула се зарежда, когато имаме
http://www.webapp.bg/admin/. А "webapp" когато имаме какъвто и да е поддомейн ('include' => "*") освен 'feed' ('exclude' => 'feed'). Feed е просто пример, не е с някаква конкретна цел. Може да се зарежда и по обратната логика. Например ако имаме feed.webapp.bg, и няма конфигурация, която да е специално за feed, ще се зареди "site" модула. Затова накрая слагам един модул 'feed', в който 'exclude' e '*', а 'include' е 'feed'. Имам и един комбинирам тип, който е за път в поддомейна. Може би звучи объркващо, но на мен точно това ми трябва.
Точно това не можах да го намеря в рамките, които поразаучих, или не точно по този начин, а аз си го представям точно така... 100% го има, просто аз не можах да открия това, което ми трябва.
И последната причина, за която пиша framework (но не на последно място) - опит. За 2 седмици научих толкова нови неща, аз за сефте ползвам сериозно exceptions примерно. Досега съм ползвал try/catch, но никога не съм се замислял моите класове да плюят изключения.