Jak już wiemy czym powinien być, należało by się zastanowić co powinien posiadać. To już cięższa sytuacja. Zajmiemy się opisem prostego framework, który dostarczy nam solidnego szkieletu na podstawie którego napiszemy prostą aplikację webą. Moim zdaniem taki framework powinien posiadać następujące elementy:

1. System do obsługi bazy danych
Często zachodzi potrzebna nagłej zmiany w aplikacji z jednego systemu bazy danych na drugi. Gdyby aplikacja nie posiadała tego typu biblioteki i była dosyć rozbudowana moglibyśmy dniami poszukiwać fragmentów w których użyte są funkcje od starej bazy danych. Zaprojektowanie biblioteki, bądź też użycie bardzo dobrych gotowych projektów w znacznym stopniu skróci nam czas przejścia na nowa bazę danych, ponieważ wszytko jedziemy posiadać w jednym miejscu. Bardzo często też biblioteki tego typu posiadają wbudowane wsparcie dla różnych baz danych, wtedy wystarczy ustawić odpowiednio w konfiguracji i system działa już na innej bazie danych, np: z sqlite na mysql. Trzeba tu jednak pamiętać, aby nie stosować konstrukcji nie dostępnych przez inne bazy, albo napisać (o ile to możliwe) poprawki na te konstrukcje by pasowały do wybranej bazy danych.
- Dzięki takiemu narzędziu możemy w prosty sposób dopisać cache do bazy danych, co przy części zapytań na pewno wpłynie korzystanie na czas wykonywania skryptu.
- Pobieranie informacji o tym, co się działo z baza danych. W tym punkcie chodzi głownie o liczenie zapytań jak i wypisanie, ile zajęło wykonanie poszczególnego zapytania.
- Debugowanie. W bardzo prosty sposób można wyświetlić jakie czynności zostały wykonane na bazi danych, jakie zapytania zostały użyte i z jakim skutkiem się zakończyły
- Prostsza obsługa błędów. Nie musimy się tak martwić co się dzieje z zapytaniem, czy zawiera błędną składnię, bądź też czy powoduje jakieś inne komplikacje. Odpowiednio napisany kod poinformuje nas o tym automatycznie, w php4 wyświetli błąd lub też zakończy wykonywanie skryptu, w php5 mamy dużo bardziej potężne narządzie jakim są wyjątki, wiec możemy obsłużyć taka sytuacje bardzo wygodnie.
- Ujednolicone Api. Punkt nie wymaga specjalnego opisywania, chodzi w nim głównie o to że posiadamy metody które zwracają ustalone wartości, często w bardzo przystępny sposób dla programisty.

2. Obsługa błędów i wyjątków
- Napisane biblioteki odpowiedzialne za wyświetlanie jak i obsługę błędów i wyjątków. Szczególnie przydatne podczas pisania aplikacji.

3. Sesje
- Różnego rodzaju mechanizmy, wspierające sesje. Często jest to handler sesji dostępnych standardowo w php, napisany tak że sesje że sesje zapisywane są w bazie danych, co daje nam dużo większe pole manewru. Dzięki zastosowaniu tego rozwiązania, bardzo prosto możemy napisać modyfikacje, która pokaże nam kto jest aktualnie on-line na stronie

4. Wyjście i wejście
- Często nazywane także Request’em (żądanie) i Response (odpowiedz).
- Zadaniem Request’a jest przechwycenie danych wysłanych do aplikacji przez klienta i odpowiednie ich filtrowanie, w celu zabezpieczenia systemu przed rożnymi próbami włamań. Nie dość że podnosi to znacznie bezpieczeństwo to użytkowanie takiego mechanizmu jest naprawdę przyjemne.
- Zadaniem Response jest wysłanie odpowiedzi do klienta i tu zależnie, czy to aplikacja jest pod konsole, czy też webowa, różne klasy powinny powinny się tym zajmować. Często pomija się tą bibliotek ponieważ w php głównie pisze sie aplikacje przystosowane tylko do jednego środowiska (konsola/web).

5. System szablonów
- Bardzo ważna część aplikacji, ponieważ pozwala na oddzielenie warstwy biznesowej od wyglądu. Czyli prostszymi słowami, system szablonów zajmuje sie wygenerowanie ze zmiennych jakie zostaną mu przekazane, odpowiedniego kodu (najczęściej HTML).
- Można tutaj używać już gotowych bibliotek jakich jak np.: OpenPowerTemplates (PHP5) i Smarty (PHP4), bądź też postawić na prostotę i korzystać ze zwykłej składni php. Nie polecam pisania własnego systemu szablonów, aktualnie systemy szablonów stoją na takim poziomie, ze trudno jest coś nowego i szybszego wymyślić.

6. Wsparcie dla języka
- Stosowany w bardziej zaawansowanych aplikacjach, pozwala na prowadzenie strony wielojęzycznej (wspierającej wiele języków), zazwyczaj silnie powiązany z system szablonów.

7. Jądro systemu
- Najważniejsza część aplikacji (chociaż nie zawsze zawarta w framework’u!) z naszego punktu widzenia. Decyduje ona o tym, jak poszczególne fragmenty zostaną połączone i w jaki sposób dalej będzie się rozbudowywać naszą aplikacje o potrzebne elementy. Bardzo często używa się tutaj jakiś wzorców, takich jak na przykład MVC.