Что должен включать в себя Framework?
=======================================

 Здравствуйте! Я познакомился с некоторыми популярными фреймворками (от Codeigniter 3,4 до Yii2 и Symphony), в каждом фреймворке были какие-то не очень удобные и понятные вещи, были и очень хорошие практики, но часто замечал избыточность. Поэтому, я хочу написать что-то своё, в первую очередь, наверное, в образовательных целях. Что-то, что мне было бы абсолютно понятным и я мог использовать это в разработке. Понятно, что это велосипедирование, но повторюсь, цели скорее образовательные.  

  

Какие базовые понятия я должен знать (кроме ООП), какие шаблоны проектирования? Спасибо за внимание. 

 шаблоны проектирования можете посмотреть как раз в тех фреймворках, с которыми вы познакомились (либо сами разбирайте исходники, либо поищите людей, которые это уже сделали и выложили на ютюб, уверен, такие есть).  

в yii есть события, волшебные геттеры/сеттеры, Active Record, синглтон вроде и многое многое другое (фреймворки буквально состоят из паттернов, т.к. они облегчают разработку).  

Что должен включать в себя фреймворк? тот функционал, что вам от него нужен. 

 Фреймворков так много как раз потому что требования разные.  

Иногда это только роутер, lumen.  

Иногда это самовыражение сутедунта, codeigniter.  

Иногда это успешная попытка в паттерны, symfony.  

Иногда это хороший маркетинг, laravel.  

И т.д.  

  

Начните с требований и опишите что вам нужно. Уже от этого стоит отталкиваться.  

Если хотите писать не плохой код: <https://github.com/index0h/php-conventions> 

 Вы можете начать с какого-нибудь микрофреймворка, чтобы избежать избыточности. Хотя все зависит от требований к нему. Вы можете посмотреть код вот этого [фреймворка](https://phphleb.ru), по ссылке подробная инструкция на русском. Изучить его код можно за один день, если интересует принцип работы подобного типа фреймворков. Те MVC, как указано в описании.