Здравствуйте! Я познакомился с некоторыми популярными фреймворками (от Codeigniter 3,4 до Yii2 и Symphony), в каждом фреймворке были какие-то не очень удобные и понятные вещи, были и очень хорошие практики, но часто замечал избыточность. Поэтому, я хочу написать что-то своё, в первую очередь, наверное, в образовательных целях. Что-то, что мне было бы абсолютно понятным и я мог использовать это в разработке. Понятно, что это велосипедирование, но повторюсь, цели скорее образовательные.
Какие базовые понятия я должен знать (кроме ООП), какие шаблоны проектирования? Спасибо за внимание.
шаблоны проектирования можете посмотреть как раз в тех фреймворках, с которыми вы познакомились (либо сами разбирайте исходники, либо поищите людей, которые это уже сделали и выложили на ютюб, уверен, такие есть).
в yii есть события, волшебные геттеры/сеттеры, Active Record, синглтон вроде и многое многое другое (фреймворки буквально состоят из паттернов, т.к. они облегчают разработку).
Что должен включать в себя фреймворк? тот функционал, что вам от него нужен.
Фреймворков так много как раз потому что требования разные.
Иногда это только роутер, lumen.
Иногда это самовыражение сутедунта, codeigniter.
Иногда это успешная попытка в паттерны, symfony.
Иногда это хороший маркетинг, laravel.
И т.д.
Дело в том, что я никогда именно профессионально не занимался этим, поэтому требования особо не могу сформулировать) буквально недавно только устроился на стажера (битрикс) и сразу понял, что надо досконально изучать нативный php. А начать думаю с чего-то простейшего. Я уже писал примитивное MVC, роутер, контроллер и модель, но потерпел неудачу, ввиду неправильной архитектуры, поэтому вопрос и задаю)
Вы не с той стороны едите шоколадный рогалик.
Архитектура строится на базе требований. Это не какая-то магия, которую делаешь и вдруг всем станет хорошо.
Пример 1 Роутер.
Роутинг по сути - это подбор экшна по пути.
Если путей всего пара штук - switch-case будет самым оптимальным решением.
Если путей много - строим дерево по ним и уже на этапе выбора экшна обходим дерево.
Если путей много, но хочется максимальной производительности - тут дорога в кодогенерацию, посмотрите symfony router.
Пример 2 Модель.
Модель буду рассматривать в контексте ORM.
Допустим вам требуются простенькие CRUD операции, тестами покрывать не нужно - берите ActiveRecord. Yii-шный. В ларке сделали очень пацавато. Главное - не делайте толстые модели и все будет хорошо.
Если вам нужно что-то по серьезней - берите Repository. Тут у вас уже выбор по меньше Doctrine, или Doctrine.
Вы можете начать с какого-нибудь микрофреймворка, чтобы избежать избыточности. Хотя все зависит от требований к нему. Вы можете посмотреть код вот этого фреймворка, по ссылке подробная инструкция на русском. Изучить его код можно за один день, если интересует принцип работы подобного типа фреймворков. Те MVC, как указано в описании.