Кроме того, я просто хотел бы добавить, что тот факт, что любой другой язык ОО имеет какие-то интерфейсы и абстракцию, также не означает, что они имеют то же значение и назначение, что и в PHP. Использование абстракции / интерфейсов немного отличается, в то время как интерфейсы в PHP на самом деле не имеют реальной функции. Они просто используются по смысловым и схемным причинам. Суть в том, чтобы проект был максимально гибким, расширяемым и безопасным для будущих расширений, независимо от того, имеет ли разработчик позже совершенно другой план использования или нет.
Если ваш английский не является родным, вы можете посмотреть, что такое Abstraction and Interfaces. И ищите синонимы тоже.
И это может помочь вам как метафора:
ИНТЕРФЕЙС
Допустим, вы выпекаете новый вид пирога с клубникой и составляете рецепт с описанием ингредиентов и этапов.
Только вы знаете, почему это так вкусно, а вашим гостям это нравится.
Затем вы решаете опубликовать свой рецепт, чтобы другие люди тоже могли попробовать этот торт.
Дело здесь
- чтобы сделать это правильно
- быть осторожным
- чтобы предотвратить вещи, которые могут испортиться (например, слишком много клубники или чего-то еще)
- чтобы было проще для людей, которые пробуют это
- чтобы сказать вам, как долго нужно делать (например, помешивать)
- чтобы сказать, что вы МОЖЕТЕ делать, но НЕ ДОЛЖНЫ
Именно это описывает интерфейсы. Это руководство, набор инструкций, которые соблюдают содержание рецепта.
То же самое, как если бы вы создали проект на PHP и хотели бы предоставить код на GitHub или вместе с вашими товарищами или кем-то еще.
Интерфейс - это то, что люди могут делать, а что нет. Правила, которые его держат - если вы не повиноваетесь одному, вся конструкция будет нарушена.
АБСТРАКЦИЯ
Чтобы продолжить эту метафору здесь ... представьте, на этот раз вы - гость, съевший этот торт. Тогда вы пробуете этот торт, используя рецепт сейчас.
Но вы хотите добавить новые ингредиенты или изменить / пропустить шаги, описанные в рецепте. Так что будет дальше? Запланируйте другую версию этого торта.
На этот раз с черными ягодами, а не с соломенными ягодами и большим количеством ванильного крема ... вкусно.
Это то, что вы могли бы считать продолжением оригинального торта. Вы в основном делаете абстракцию этого, создавая новый рецепт, потому что это немного по-другому. В нем есть несколько новых шагов и других ингредиентов. Однако в версии с черными ягодами есть некоторые детали, которые вы переняли у оригинала - это базовые шаги, которые должен иметь каждый вид этого торта. Как ингредиенты так же, как молоко - это то, что есть в каждом производном классе.
Теперь вы хотите обменяться ингредиентами и шагами, и они ДОЛЖНЫ быть определены в новой версии этого торта. Это абстрактные методы , которые должны быть определены для нового пирога, потому что в пироге должен быть фрукт, но какой? Таким образом, вы берете черные ягоды на этот раз. Готово.
Итак, вы расширили торт, следовали за интерфейсом и абстрагировали от него шаги и ингредиенты.