@phpcoder81

Надо делать наследование или нет?

Никак понять не могу. В примерах по ООП часто пишут, есть класс User и наследники UserStandart, UserAdmin, ну примерно так, +-.

А у меня класс User, в котором сразу прописаны все методы управления. А то, каков статус пользователя, записано в свойстве: 1 обычный юзер, 2 админ.

И я вот не пойму, зачем делать наследование в данном случае, ради примера, или тут есть смысл?
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 5
fomvasss
@fomvasss
PHP developer
Если у вас всегда экземпляр класса User имеет одинаковые методы и поля, то и классов отдельных не нужно делать. Тем более что конкретно в вашем примере функционал юзера, можно отделить ролями/правами, которые могут быть реализованы позднее отдельно.
Ответ написан
@Arik
if($user instanceof UserAdmin) {
//admin
}
public function openWebsite(UserAdmin $userAdmin) {
// 
}

Точно знаем что юзер админ или просим чтоб юзер был только админом, как там реализована проверка на админство уже этот код не касается.
Ответ написан
Комментировать
Есть хороший способ определить рациональность использования наследования. Для этого нужно ответить на ряд вопросов:
- оба класса из одной предметной области;
- наследник отвечает принципу подстановки Барбары Лисков;
- код наследуемого класса необходим либо хорошо подходит для наследника;
- наследник в основном добавляет логику.
Чем больше положительных ответов, тем больше вероятность, что вы не промахнетесь с выбором наследования.

Конкретно в вашем случае я рискну предположить, что использование наследования излишне, и даже может стать бомбой замедленного действия при дальнейшем развитии системы. Здесь наследование выступает в роли выбора возможных алгоритмов действий пользователя в системе и введение новых ролей может оказаться очень дорогим, особенно если один пользователь должен будет обладать сразу несколькими ролями.
Ответ написан
Комментировать
@Yan-s
Надо или нет определяете вы проектируя архитектуру приложения. Примеры пишутся для объяснения сути, что наследование, это когда один объект - более конкретная разновидность другого.
Ответ написан
Morpheus_God
@Morpheus_God
У вас может быть в классе User описано лишь поле Name и поле LastName.
А в конкретной реализации вы можете дописать для каждого конкретного юзера уже свои методы и дополнительные поля. Все от проекта зависит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы