вы читали про MVC? подключение/запросы к БД, отправка писем, кэширование – скорее библиотеки, утилиты. Реализуйте простой MVC без сохранения в БД, просто ассоц массив в модели. Причем постарайтесь методами модели удовлетворить все потребности контроллера - получении экземпляр модели по id, изменение данные, хотя бы чтоб просто в лог записалось что сохраняете и т.д. Дальше реализуйте доступ к БД для моделей, пусть пока будет просто MySQL, дальше подумайте о том что попросили поменять БД, например, на редис, ок, тогда переписывать надо все модели?
Можно конечно попробовать посмотреть огромные фреймворки, но из-за огромного количества паттернов, что они в себе несут, не всегда можно уловить мысль неготовому человеку, лучше за раз брать один паттерн, книгу по нему или набор статей и реализовывать это все самому, в целом там ничего сложного, после уже можно брать какой популярный фрейм и смотреть его код