implement
или extend
использование? Реализация, как представляется, является способом обеспечения того, чтобы определенные методы существовали в классе и что эти вызовы функций методов правильно отформатированы. Реализация не способ передачи переменных или «настроек» в класс?
Ожидаемый сценарий реальной жизни: у меня есть платформа для электронной коммерции, в которой есть несколько классов платежей, которые соответствуют одному и тому же дизайну. Когда новый класс оплаты должен быть добавлен, очень легко следовать определенному дизайну interface
чтобы убедиться, что все биты и куски находятся с самого начала.
Расширяющиеся классы заставляют расширенный (дочерний?) Класс наследовать все от своего родительского класса, кроме методов и переменных, объявленных как private
?
Ожидаемый сценарий реальной жизни: у меня есть один класс, называемый sessions
с двумя дочерними классами с именем sessioncookies
и databasesessions
. sessioncookies
и databasesessions
, вместе наследуют ряд опций взаимного конфига из своих родительских сеансов, что позволяет легко изменить параметр конфигурации, чтобы повлиять на всевозможные возможные хранилища данных посетителя.
Наследование полезно для уменьшения количества кода, который вы переписываете. Если у вас есть несколько классов с несколькими общими методами или полями, вместо того, чтобы снова и снова определять эти методы и поля, вы можете включить их в базовый класс и каждый из дочерних классов расширить этот базовый класс.
Интерфейсы (и implements
) полезны, когда вы хотите определить общий протокол того, как должна себя вести группа объектов. Например, вы можете указать, что сопоставимые объекты можно сравнить для равенства и хеширования и т. Д.
Использование наследования в конечном счете является выбором дизайна. Будьте в курсе случаев, когда вы определяете одни и те же методы для нескольких классов; это отличные случаи, когда вы можете включить эти методы в базовый класс. То же самое относится к классам, которые соблюдают одни и те же характеристики: вы можете гарантировать согласованность, поместив эти характеристики в интерфейс, который будет реализован этими связанными классами.
Наследование – большая концепция в ООП, которая выходит за рамки простого PHP. Я рекомендую вам прочитать статью Википедии о наследовании и, возможно, « Шаблоны дизайна» от «Банды четырех» .
Я считаю, что ваше понимание наследования в основном правильное. Следующим шагом было бы использовать его в производстве.