1) За что обычно отвечают классы предки в MVC?
За хранение базовых функций, как пример, давай рассмотрим Controller
Предположим, что ядро фреймворка, вызывает всегда три метода, в такой последовательности:
beforeAction - запустить что-то до выполнения экшена
action - запустить сам экшен
afterAction - запустить что-то после выполнения экшена
** экшн = метод класса контроллера
так вот чтобы, ты мог не объявлять beforeAction и afterAction, они объявляются в каком-нибудь абстрактном классе Controller, от которого и идет дальнейшее наследование и все потомки получают эти методы
Либо на примере модели, есть какой-нибудь класс ActiveRecord, ты наследуешь свою модель от него и все потомки получают разом всю его функциональность: например конструктор запросов через вызов цепочек:
Posts::find()->where(['title'=>'hello world'])->orderBy(['id'=>SORT_DESC])->all();
ну, а твоя модель выглядит так class Posts extends ActiveRecord{}
т.е. вся логика скрывается в родителе
2) По разному, тут надо смотреть конкретный фреймворк: бывает что сервис контейнер этим занимается, бывает DI, бывает просто вызывается фабрика, а внутри ей передается соединение которое хранится где-нибудь в "реестре" ядра... в общем по-разному.
3) Опять же по-разному, но в целом принцип такой. Для каждой сущности есть своя модель, например есть отдельно модель Конкурсы, есть отдельно модель Участники и т.д. Тебе надо показать отдельно кол-во парней и девушек, тогда в контроллере отвечающим за вывод конкурса, ты обращаешься к модели Участников и получаешь необходимую информацию (что-то типа $boys = Paticipant->maleCount(); $girls = Paticipant->femaleCount(); ) и передаешь эти данные во view. А сам подсчет, работа с бд и т.д. идет уже в модели (Paticipant). В итоге получается что вся твоя логика делится на такие шаги:
- ядро анализирует запрос и вызывает экшн контроллера
- экшн контроллера, получает необходимые данные из модели и передает во вью
- модель содержит всякую логику получения и обработки данных
- контроллер или экшн контроллера рендерит вью и отдает код клиенту
4) Ну, обычно на сайте фреймворка пишут что туда входит. Всякие плюшки для разработчиков (например хелперы по созданию форм, классы по работе с SSH, консолью и т.д.), тесты, документация и куча всяких, часто никогда не используемых, штук