Является ли вызов методов в родительском классе плохой идеей?

#php #oop

#php #ооп

Вопрос:

В реальном проекте у нас был довольно длинный класс PHP, и во время рефакторинга он был разбит на 2 меньших класса, ClassA и ClassB, где ClassA расширяет ClassB (просто имена примеров). Были некоторые проблемы с устаревшим кодом, поэтому нам пришлось поступить таким образом.

В ClassB мы вызываем некоторые методы из ClassA (они не переопределены, я имею в виду, что методы не существуют в ClassB). Это плохая идея в ООП?

Редактировать: очевидно, что в остальной части кода мы всегда инициируем только ClassA. Но интересно, является ли вызов родительского класса из дочернего большим «НЕТ» в терминах ООП?

Комментарии:

1. «Это плохая идея в ООП?» Нет, в этом весь смысл наследования.

2. Подождите, A расширяет B или B расширяет A? Ваше объяснение, похоже, противоречит само себе.

3. classB должен быть абстрактный класс, чтобы вы не могли создать его экземпляр самостоятельно. В противном случае вы попытаетесь вызвать методы из дочернего класса, которые не существуют.

4. @AlexHowansky ClassA расширяет ClassB, как я уже писал. ClassA содержит метод Method1(), а в ClassB у нас есть некоторый метод, который вызывает Method1() (который находится в родительском классе). ClassA расширяет ClassB {

5. @AlexHowansky Пример кода (извините, не могу его отформатировать): класс ClassA расширяет ClassB { общедоступная функция someMethod() { /* некоторый код */ } } класс ClassB { общедоступная функция run() { $this->someMethod(); } }

Ответ №1:

То, что вы описываете, является распространенным шаблоном в ООП. Родительский класс должен быть абстрактным классом, поэтому он не может быть создан сам по себе, могут быть созданы экземпляры только дочерних классов.

Все дочерние классы необходимы для реализации методов, которых нет в родительском классе, но некоторые методы являются общими для всех классов, и они реализованы в родительском. Затем эти распространенные методы передаются дочерним элементам для некоторых аспектов реализации, специфичных для дочерних элементов.