2015-02-06 2 views
-4

Может кто-нибудь сказать мне, что основные преимущества и недостатки наследования/многоуровневого наследования в php.Thanks заранее :)Преимущества и недостатки наследования в PHP

+0

http://php.net/manual/en/language.oop5.inheritance.php – user3647254

+0

В чем причина того, чтобы снизить мой ответ? – Priyank

+0

За ваш ответ или вопрос. (Я не ответил на ваш ответ) – user3647254

ответ

2

Преимущества: -

One Основными преимуществами наследования являются минимизация количества дубликатов кода в приложении путем совместного использования общего кода среди нескольких подклассов. Если эквивалентный код существует в двух связанных классах, иерархия обычно может быть реорганизована для перемещения общего кода до взаимного суперкласса. Это также приводит к лучшей организации кода и меньшим, более простым единицам компиляции.

Наследование также может сделать код приложения более гибким для изменения, поскольку классы, которые наследуются от общего суперкласса, могут использоваться взаимозаменяемо. Если тип возврата метода является суперкласс

Повторное использование - средство для использования общих методов базового класса без переписывания же расширяемость - расширение логики базового класса в соответствии с бизнес-логикой производного класса сокрытия данных - базовый класс может решить сохранить некоторые частные данные таким образом, чтобы он не мог быть изменен производным классом

Переопределение - с наследованием мы сможем переопределить методы базового класса, чтобы значительная реализация метода базового класса могут быть сконструированы в производном классе.

Недостатки: -

  1. Одним из главных недостатков наследования является увеличение времени/усилий требуется программа, чтобы перейти через все уровни перегруженных классов. Если у данного класса есть десять уровней абстракции над ним, то по существу потребуется десять прыжков для выполнения функции, определенной в каждом из этих классов.

  2. Основным недостатком использования наследования является то, что два класса (базовый и унаследованный класс) плотно соединяются. Это означает, что нельзя использовать независимо друг от друга.

  3. Также со временем во время технического обслуживания необходимо изменить новые функции как базового, так и производного классов. Если будет изменена сигнатура метода, в обоих случаях мы будем затронуты (наследование &)

  4. Если метод удален в «суперклассе» или агрегате, тогда нам придется перефакторировать в случае использования Этот метод может быть немного сложным в случае наследования, потому что наши программы все еще будут компилироваться, но методы подкласса больше не будут переопределять методы суперкласса. Эти методы станут самостоятельными методами сами по себе.

1

Не уверен, что это подходящий сайт для этого типа вопросов, но все в порядке.

Предположим, у вас есть базовый класс Base, который распространяется на все остальные классы. В базе вы можете определить вещи, которые могут использовать все другие классы, например. соединение с mysqli, поэтому все классы могут использовать $this->mysqli и не обязательно должны быть объявлены.

Я создал электронную коммерцию cms, где я использую ее таким образом.Я также определил метод под названием getLink(), который проверяет, есть ли способ getUrl() и getTitle(). Эти методы определены в каждом дочернем классе (на моей CMS Product, Category ...). Возьмем класс Product, есть также методы getUrl() и getTitle(), но метод getLink() находится в Base, который продолжается Product. Я использую метод getLink() почти везде, поэтому, если я не хочу писать его в каждом классе, я просто пишу его в Base, и я могу его использовать.

Другой пример из моей CMS: в конструкции Base У меня есть чек, если был введен вход с именем global_update. Он будет проверять, были ли определены $this->table и $this->id, и если да, то он обновит базу данных данными. В противном случае мне нужно будет определить обработчик для каждого действия по обновлению. Таким образом, у меня есть один глобальный для каждого класса, и я пишу собственные обработчики только для более сложных форм.

Надеюсь, это понятно, если нет, прокомментируйте и спросите.

Смежные вопросы