PHP i frameworki.
W swoim kilkuletnim doświadczeniu w programowaniu w języku PHP bardzo często spotykam się z różnymi opiniami na temat słuszności stosowania framework'ów w PHP. Z jednej strony panuje opinia, że serwis webowy, który ma być szybki nie może być napisany z użyciem framework'a. Z drugiej strony pisanie aplikacji 'na piechotę', wydłuża proces tworzenia, testowania, co niekiedy jest niedopuszczalne dla projektu.
Zanim zacznę dywagować na ich temat, wyjaśnijmy sobie czym jest framework. Według prawie bezpośredniego tłumaczenia z języka angielskiego framework to szkielet, rama. W programowaniu framework to zbiór bibliotek, programów, narzędzi, które uławiają i przyspieszają proces tworzenia i testowania aplikacji. Framework zawiera najczęściej stosowane implementacje (np. walidacja danych wejściowych), systematyzuje podział logiczny aplikacji rozdzielając część kontrolną i część wizualną (interfejs użytkownika).
Doświadczony programista zazwyczaj stosuje w każdej swojej aplikacji ten sam sposób implementacji pewnych mechanizmów, jeśli do tej pory się sprawdzały. Zebranie takich doświadczeń i usystematyzowanie ich tworzy framework. Co istotne jeśli z danego frameworka korzysta większa liczba programistów, niekoniecznie tworząc ten sam projekt, okazuje się, że zysk jest jeszcze bardziej zauważalny. Jest stara zasada mówiąca, że jak w kodzie powtarzają się te same trzy linijki przynajmniej dwa razy, to jest to powód na zbudowanie z nich procedury. Ta sama zasada nieco bardziej globalnie odnosi się do klas. Jeśli mamy kilka klas, z których często korzystamy, to połączmy je w framework. Oczywiście przestrzegam przed tworzeniem własnych frameworków, bo to całkowicie nie ma sensu, chyba że udostępnimy go i będziemy rozwijać w ramach Open Source.
W świecie PHP jest mnóstwo lepszych i gorszych frameworków, każdy z nich ma jakieś cechy szczególne. Jednym z silnie rozwijanych i świetnie udokumentowanych jest Zend Framework. Bardzo często uważany za framework, który w zasadzie nie narzuca żadnych reguł, można z niego korzystać praktycznie transparentnie, tak jakbyśmy używali zewnętrznych klas pomocniczych, podobnie jak w przypadku PEAR. Dość ciekawe i również popularne są Symfony oraz CakePHP. Mi do gustu przypadł jednak CodeIgniter (skrót CI).
CodeIgniter to framework, w którym bardzo duży nacisk stawia się na czystość kodu, elastyczność konfiguracji i jednocześnie szybkość działania. CI jest stosunkowo niewielki (w porównaniu z Zend Framework), mimo to posiada bardzo dużo wbudowanych mechanizmów, które przy codziennym budowaniu aplikacji stosowane są bezprzerwy. Największą jego zaletą według mnie jest bardzo łatwa integracja i rozbudowa o własne klasy. Framework ten ma swój system szablonów oparty o PHP, ale bezproblemowo można zaimplementować w nim np. Smarty. Bardzo duży nacisk postawiono na bezpieczeństwo danych wejściowych, walidację formularzy oraz zabezpieczenie przed XSS. Framework umożliwia także rozbudowę wewnętrznych mechanizmów poprzez tzw. hooks, czyli rozszerzanie integralnych klas CodeIgnitera.
Dodatkowymi cechami jest własna (bardziej elastyczna i rozbudowana) obsługa sesji, a także mechanizmy wspomagające debugowanie aplikacji (m.in. logi). Co mnie najbardziej ucieszyło, to wbudowana i świetnie zaimplementowana elegancja tworzenia URL'i. Standardowy URL wygląda mniej więcej tak:
http://example.com/index.php/class/method/param/
Bardzo łatwo wykorzystując moduł mod_rewrite w serwerze Apache można skrócić powyższy URL do formy:
http://example.com/class/method/param/
Podział folderów z poszczególnymi częściami projektu również został świetnie przemyślany, możemy bowiem zbudować naszą aplikację ze wszelkimi rozszerzeniami własnymi nie ingerując w główne drzewo zawierające CI, co znacznie ułatwia późniejszą aktualizację frameworka.
Według mnie CI zasługuje na uwagę głównie ze względu na przemyślane i przygotowane dla Web 2.0 rozwiązania dla programistów. Ja jestem pod wrażeniem i wciąż się mile zaskakuję odkrywając CI.
