Я проникся ООП когда писал одну программулину в процедурном стиле и внезапно понял что не могу разобрать свой собственный код, написанный вчера. Потратил на рефакторинг 12 часов и после этого код стал больше похож на английский язык, чем на непонятный набор букв, точек, цифр и скобочек. Так что в идеале нужна практическая задача на чистом языке, без фреймворков.
Раз речь о PHP, попробуйте написать свою ORM. Простейший построитель запросов для CRUD, но универсальный. Как минимум наследование точно поймёте.
По паттернам я сейчас толкового курса сходу не нашёл, но не переоценивайте их значимость. Лучше почитайте (посмотрите видео) о том, что такое SOLID.
Когда придёт понимание что такое наследование и зачем оно нужно, тогда можно и про паттерны почитать, но как по мне, реально интересен только Одиночка. Все остальные это просто правильные способы применить наследование, и выглядят довольно очевидными.