Наследование классов в PHP
Уроки и статьи
PHP7 MySQL и PHP ООП в PHPГлавная / ООП в PHP / Наследование классов в PHP
Наследование классов в PHP
Автор: Василий Пупкин Чтений: 303 Дата добавления: 27-03-2017 03:54
Наследование — это один из «трёх китов» ООП, который позволяет создавать дочерние классы на основе родительских (супер-классов), забрав у них свойства, методы и конструкторы. Хочется заметить, что наследование классов в PHP встречается только уже в серьёзных проектах
Давайте для начала создадим какой-нибудь несложный класс, например, класс, отвечающий за объект «Автомобиль» (в файле «car.php«
В классе «Car» мы определили два свойства, отвечающие за текущие координаты местоположения автомобиля. Создали конструктор, который позволяет назначить начальные координаты. Затем создали метод move(), позволяющий начать движение в координаты, переданные в параметрах метода.
Теперь создадим класс, отвечающий за «Легковой автомобиль» (в файле «auto.php«):
В самом начале мы подключаем наш класс «Car«. Затем мы начинаем создавать класс «Auto«, который является наследником для класса «Car» («class Auto extends Car«). Ввиду того, что класс «Auto» уже забирает все свойства, методы и конструкторы, то нам нет необходимости их описывать заново. Однако, методы move() и sound() должны иметь другую реализацию, поэтому мы пишем другой код этих методов.
И, напоследок, создадим скрипт, который создаст объект «Car» и «Auto» и воспользуемся их методами и свойствами:
Вначале всё просто: мы создаём объект «Car«, выводим его свойства, используем его метод move(). А вот затем мы создаём объект « Auto«. Ввиду того, что мы не определяли своего конструктора в этом классе, то он берётся из родительского. Затем выводим свойства, которые мы, кстати, также не определяли, и они тоже берутся из родительского класса. А потом используем метод move(). И, разумеется, берётся реализация не из класса «Car«, а из класса «Auto«, который отвечает у нас за легковой автомобиль.
Однако, данный пример является несовершенным, точнее, даже очень грязным, ввиду наличия дублирования (повторяющийся код). И логики в том, что у нас существует «Автомобиль» и «Легковой автомобиль» тоже нет. Вы можете представить себе «Автомобиль»? Уверен, что у каждого из Вас будут совершенно разные образы. А вот «Легковой автомобиль» — это уже более точное определение (хотя тоже далеко от окончательно точного). И в ООП для неточных, абстрактных понятий, существует возможность создавать абстрактные классы, о которых мы поговорим в следующей статье. И Вы увидите, что код данного примера станет на порядок чище.
Объектно-ориентированное программирование в PHP OTUS
Для того, чтобы написать любую программу, требуется выбрать специальный язык, изучить его синтаксис и функционал, а затем продумать код. Программа может быть составлена как на основе логики и математики, так и опираясь на концепцию объектов. Второй вариант более привлекателен, особенно для новичков.
PHP – язык программирования, который входит в ряды самых популярных средств создания программного обеспечения по рейтингу TIOBE. В основном применяется для веб-приложений (согласно сведениям из Google). Имеет концепции ООП, о который зайдет речь далее. Информация позволит получить максимально много знаний о PHP и программировании на нем «через объекты».
PHP – это…
В Google можно увидеть немало информации о рассматриваемом языке. Это «способ общения с ПО и устройствами» широкого спектра применения. В основе лежит принцип сценариев. Обладает открытым кодом и общим назначением.
Разработан для того, чтобы создавать веб-приложения. Предусматривает:
- простой и понятный синтаксис;
- возможность создания генерируемых динамическим способом веб-страничек;
- интерфейс, с которым разберется даже новичок;
- стабильную работу;
- высокий уровень безопасности;
- выполнение PHP-скриптов на серверной стороне.
Согласно Google, функции языка позволяют программировать не только мелкие веб-утилиты, но и крупные игры/проекты. Использовать его удобно и легко. Отличный вариант для тех, кто только начинает погружение в мир программных кодификаций.
ООП – определение
ООП в PHP – важная концепция, без которой не получится полноценно создавать контент на соответствующем языке. Нужно уделить изучению соответствующей особенности должное внимание.
В Google немало определений объектно-ориентированного программирования. Это своеобразная методология программирования, опирающаяся на представлении контента в виде связи объектов. Каждый из них выступает как экземпляр класса. Классы образовывают иерархию, носящую название наследования.
ООП – подход к написанию утилит в виде моделирования информационных элементов. Предусматривает быструю разработку сложного контента. Утилиты, в основе которой лежит соответствующая концепция, согласно Google, обладают хорошей масштабируемостью и легкой поддержкой на протяжении длительного времени.
Для чего нужно объектно-ориентированное программирование
ООП в PHP появилось относительно недавно – после 5 версии. До этого момента соответствующая концепция не поддерживалась. Эту информацию можно подтвердить через Google или любую иную поисковую систему. Но классы и объекты здесь встречаются с 3 версии.
Объектно-ориентирующая составляющая:
- помогает исправлять фатальные ошибки языка;
- способствует более простому и быстрому пониманию кодификации;
- минимизирует избыточность информации;
- позволяет управлять имеющимися моделями предельно эффективно.
Она помогает воссоздавать новые игры и сложные программы, задействовать базы данных, а также быстро осваиваться в коддинге и обнаруживать ошибки софта.
Классы в языке
Класс – своеобразный шаблон, который позволяет представлять реальное понятие. Отвечает за управление свойствами задействованного элемента. Позволяет манипулировать, используя разного рода методы.
Класс, согласно Google, подразумевает объединение нескольких «себеподобных» в иерархию наследования.
Наглядные примеры помогут лучше сориентироваться. Выше представлен код, в котором создан класс Employee. Он отвечает за объект служащего. Оператор class Employee, прописанный в первой строке определяет класс Employee. После остается объявлять свойства, методы класса, а также конструктор.
Как быть со свойствами
Свойство класса – переменная, которая задействована для хранения данных об объекте. Такое определение удастся отыскать через Google. В приведенной ранее практике происходит следующее:
- Определены три свойства.
- Название свойств – first_name, age, last_name.
- Доступ к свойствам класса чаще всего производится через создаваемые объекты.
- Private-свойства доступны в пределах конкретного класса. За счет подобной особенности удается обеспечить предельную безопасность кодификации.
Существуют различные уровни доступа к свойствам и методам класса. Они будут рассмотрены позже.
Что там с конструкторами
Конструктор – спецметод класса, вызываемый автоматически при инстанцинации элемента (Google). Классы, в которых объявлен constructor, отвечают за вызов соответствующего метода при каждом создании нового элемента.
Конструкторы, согласно Google, очень полезны при различных обстоятельствах. Пример – инициализация состояния элемента перед непосредственным применением в кодификации.
Выше – практика применения конструктора при наследовании. Определение оного происходит через метод _construct.
Методы
ООП в PHP немыслимо без методов. Это – функции, которые отвечают за выполнение тех или иных действий. Последние имеют тесную связь с объектами.
Используются для доступа и управления свойствами элемента, выполнения связанных операций. Примеры выше предусматривают определение метода getLastName. Он будет возвращать фамилию, которая имеет связь с соответствующей составляющей.
Объекты
Предыдущая информация раскрывает базовую структуру класса. Теперь можно изучить понятие объектов.
Для того, чтобы задействовать класс, требуется инстанцировать оный. Конечный результат — это и есть объект. Реальный элемент, который предусматривает возможность работы над ним.
Выше представлена практика работы с class и object. Стоит запомнить следующие данные:
- Для создания объекта любого класса вместе с его «названием» требуется использовать ключевик new.
- Когда class определил метод «конструктор» и ему нужны аргументы, программеру придется передать оные. Это необходимо для создания экземпляра объекта.
- Приведенные примеры используют три аргумента. Они были созданы в момент появления $objEmplayee.
- Метод _construct будет автоматически вызываться при инициализации элемента.
- После всего происходит вызов методов класса для $objEmployee. Это нужно для того, чтобы получить сведения, которые возникли в момент появления элемента.
В Google удается обнаружить информацию о том, что можно создавать несколько объектов одного класса.
Соответствующая манипуляция прописана в кодификации выше. В вот один из примеров наглядного представления класса Employee и его экземпляров.
Если рассматривать ООП через PHP в элементарной форме, можно сделать вывод о том, что класс – это проект. Он необходим для создания структурированных объектов/элементов.
Инкапсуляция
Инкапсуляция – важная составляющая объектно-ориентированного программирования. В Google прописано, что с ее помощью удается ограничивать доступ к тем или иным свойствам/методам элемента.
Инкапсуляция по Google служит для быстрой организации иерархической управляемости. Значительно упрощает процедуру коддинга.
Об уровнях доступа
При создании приложения в кодификации используются разного рода уровни доступа. Они отвечают за безопасность.
Различают следующие варианты:
- public function;
- private;
- protected.
Далее каждый вариант будет рассмотрен более подробно.
Общий
В Google общий доступ – это возможность получения оного из любого места вне класса к свойствам или методам. Обращение доступно по всему приложению. Корректировки можно производить из любого блока кодификации.
Выше – пример, в котором общедоступным выступает name. К нему можно обратиться из любого пространства за пределами класса. Именно такой вариант был рассмотрен раньше.
Приватный
Private по Google – это доступ, который предоставляется в пределах конкретного элемента кодификации. В рассматриваемом случае – в классе.
Именно там происходит определение методов получения и установки.
Так будет выглядеть предыдущий элемент кода, переделанный на доступ типа private. Запомнить рекомендуется следующие сведения:
- При попытке подключиться к свойству за пределами класса на экране появится сообщение об ошибке.
- Значение private стоит прописывать через метод setter.
- Такой вариант позволяет обеспечивать достаточный уровень безопасности кодификации.
Применяется при различных обстоятельствах. Убережет от спонтанных корректировок свойств и методов.
Protected
Последний вариант, который указан в Google – это protected. К ним возможно обращение того же класса, который определил methods и параметры. Сюда также включены классы, наследующие оный.
Понятие наследования
В PHP и ООП примеры работы с кодами предусматривают наследование. Это – важный аспект объектно-ориентированного программирования. Позволяет наследовать параметры и methods других классов, расширяя оные. Именно такие возможности прописаны в Google.
Стоит запомнить следующие данные:
- Класс, который будет наследоваться – родительский.
- Класс, которому передаются параметры – дочерний.
- При создании экземпляра элемента дочернего класса оный будет наследовать свойства и methods родительского.
Выше – наглядный пример работы наследования. Person тут – родитель, а Employee – дочерний. А вот реальный пример кода:
Важно запомнить такую информацию:
- Employee для наследования использовал ключевик extends.
- Employee способен получать доступ ко всем свойствам и методам Person.
- $employee получает доступ к getName и setName, определенные в Person, так как оные имеют статус public.
Элемент $employee подходит для установки age. За счет рассмотренной особенности удается значительно сократить длину итоговой кодификации.
Полиморфизм
Последний момент, который важен для использования – полиморфизм. В Google так называют концепцию, которая имеет отношение к возможности разными путями обрабатывать элементы. Все зависит от типа заданной информации.
Здесь происходит следующее:
- Корректировка formatMessage посредством переопределения в классе BoldMessage.
- Сообщение будет форматироваться по-разному в зависимости от того, какой тип элемента перед разработчиком.
- В ООП на PHP нет поддержки перегрузки.
Для того, чтобы лучше разобраться в рассмотренных примерах, рекомендуется проработать вручную все кодификации. А еще можно отыскать немало полезных туториалов на соответствующую тематику в Google.
По этой ссылке находятся видео-уроки, которые помогут лучше разобраться в объектно-ориентированном программировании и PHP. Это – отличный настольный помощник как для новичков, так и для опытных разработчиков.
А для того, чтобы быстрее освоить PHP и его особенности, можно пройти специализированные дистанционные курсы. В конце процесса ученику будет вручен электронный сертификат, подтверждающий знания в выбранном направлении. Всего за пару месяцев получится разобраться в сложных процессах IT-сферы, а также получить бесценный практический опыт.
PHP Inheritance — Темы Scaler
Обзор
Наследование в PHP — это фундаментальная концепция объектно-ориентированного программирования (ООП) концепций, которые позволяют классу наследовать свойства и методы от другого класса. Наследование позволяет повторно использовать код и продвигает иерархическую структуру среди классов. В PHP наследование достигается с помощью ключевого слова «extends», когда подкласс наследуется от одного суперкласса. Подкласс может получать доступ к унаследованным членам и изменять их, а также определять свои уникальные члены. Наследование облегчает создание более специализированных классов, которые наследуют общие функции от базового класса, что делает организацию кода и обслуживание более эффективными.
Введение
Наследование — это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет классам в PHP наследовать свойства и методы других классов. Это облегчает повторное использование кода и способствует созданию модульных и организованных структур кода.
В PHP наследование реализовано с помощью ключевого слова extends, где дочерний класс расширяет родительский класс. Дочерний класс наследует все незакрытые свойства и методы родительского класса, что позволяет ему повторно использовать и развивать функциональные возможности, предоставляемые родителем. Это отношение между классами образует отношение «является», где дочерний класс является специализированной версией родительского класса.
Дочерний класс также может переопределять унаследованные методы, предоставляя свою реализацию. Это обеспечивает настройку и гибкость, поскольку дочерний класс может изменять или улучшать поведение унаследованных методов в соответствии со своими конкретными требованиями.
Наследование поддерживает концепцию иерархической классификации, позволяя создавать иерархии классов. Можно установить несколько уровней наследования, при этом классы могут иметь как родительские, так и дочерние классы. Эта иерархическая структура способствует организации кода и облегчает обслуживание кода за счет группировки связанных классов.
Преимущества наследования в PHP включают повторное использование кода, поскольку общие функции могут быть инкапсулированы в базовый класс и наследоваться несколькими производными классами. Это экономит время разработки, уменьшает дублирование кода и способствует модульному дизайну. Наследование также способствует расширяемости кода, позволяя добавлять новые функции путем создания новых классов, расширяющих существующие, без изменения исходного кода.
Однако очень важно использовать наследование разумно, так как неправильное использование может привести к сложной иерархии классов и жесткой связи между классами. Крайне важно поддерживать четкую и логичную структуру наследования и гарантировать, что наследование применяется в тех случаях, когда между классами действительно существует отношение «есть-а».
Что такое наследование в PHP?
Наследование в PHP — это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет классам наследовать свойства и методы других классов. Это облегчает повторное использование кода и поддерживает иерархическую структуру классов.
Наследование реализовано с использованием ключевого слова extends в PHP, где дочерний класс расширяет родительский класс. Дочерний класс наследует все не частные свойства и методы, определенные в родительском классе, что позволяет ему использовать и развивать функциональные возможности, предоставляемые родительским классом. Это устанавливает отношение «есть-а», где дочерний класс является специализированной версией родительского класса.
Наследуя от родительского класса, дочерний класс получает доступ к общедоступным и защищенным свойствам и методам, определенным в родительском классе. Он может использовать их так, как если бы они были определены в самом дочернем классе. Это способствует повторному использованию кода, поскольку общие функции могут быть инкапсулированы в базовый класс и наследоваться несколькими производными классами.
Помимо наследования свойств и методов, дочерний класс может переопределять или расширять унаследованные методы, предоставляя свою реализацию. Это позволяет дочернему классу настраивать поведение, унаследованное от родительского класса, и адаптировать его к своим конкретным потребностям.
Наследование поддерживает создание иерархий классов, в которых классы могут иметь как родительские, так и дочерние классы. Можно установить несколько уровней наследования, формируя иерархическую структуру, отражающую отношения между различными классами.
Наследование в PHP позволяет классам наследовать свойства и методы от родительских классов , позволяя повторно использовать код , повышая модульность и создавая иерархическую структуру . Это основная концепция объектно-ориентированного программирования, которая облегчает разработку гибких и удобных в сопровождении приложений PHP.
Синтаксис для наследования класса в PHP
В PHP синтаксис для наследования класса следующий:
В приведенном выше синтаксисе:
- ChildClass — это имя дочернего класса, который будет наследоваться от ParentClass.
- ParentClass — это имя родительского класса, содержащего свойства и методы, подлежащие наследованию.
- При использовании ключевого слова extends дочерний класс наследует все общедоступные и защищенные свойства и методы родительского класса. Затем дочерний класс может получить доступ к этим унаследованным членам и использовать их.
Важно отметить, что дочерний класс может наследоваться только от однородного класса в PHP. Однако несколько уровней наследования могут быть достигнуты путем создания цепочки классов, в которой каждый дочерний класс становится родительским классом для последующих дочерних классов. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Модификаторы доступа в PHP
В PHP модификаторы доступа играют важную роль в наследовании, поскольку они определяют видимость и доступность свойств и методов в иерархии классов. В PHP доступны три модификатора доступа:
- Public:
Модификатор доступа public позволяет получить доступ к свойствам и методам из любого места, в том числе вне класса, подклассов и экземпляров класса. Публичные члены наследуются дочерними классами и могут быть переопределены или расширены. - Protected:
Модификатор доступа protected ограничивает видимость свойств и методов для самого класса и его подклассов. - Private:
Модификатор доступа private ограничивает видимость свойств и методов классом, в котором они определены. Закрытые члены не могут быть доступны или унаследованы дочерними классами или экземплярами класса. Они доступны только внутри самого класса. Следовательно, закрытые члены не могут быть переопределены или расширены в дочерних классах.
Выбор модификатора доступа зависит от желаемого уровня инкапсуляции и сокрытия данных. Публичные члены обеспечивают самую широкую видимость, защищенные члены обеспечивают ограниченную видимость в иерархии классов, а закрытые члены имеют самые ограниченные возможности.
Пример:
В приведенном выше примере дочерний класс ChildClass наследует свойства и методы родительского класса ParentClass.
Модификаторы доступа (public, protected и private) определяют видимость и доступность унаследованных членов в дочернем классе. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.Типы наследования в PHP
Наследование — это основная концепция объектно-ориентированного программирования (ООП), позволяющая классам наследовать свойства и методы других классов. В PHP существует несколько типов наследования, которые разработчики могут использовать для создания иерархий классов и достижения повторного использования кода. Давайте рассмотрим различные типы наследования в PHP:
1. Одиночное наследование:
Одиночное наследование относится к сценарию, где класс наследуется от одного родительского класса . В PHP одиночное наследование является наиболее часто используемым типом наследования. Это позволяет классу наследовать свойства и методы одного родительского класса, также известного как суперкласс или базовый класс.
Синтаксис:
Пример
Запустите приведенный выше код в редакторе для лучшего и ясного объяснения.
2. Множественное наследование (не поддерживается):
Множественное наследование относится к сценарию, в котором класс наследуется от несколько родительских классов . Однако PHP не поддерживает множественное наследование напрямую. В отличие от некоторых других языков программирования, PHP запрещает классу наследоваться более чем от одного класса одновременно. Это ограничение наложено, чтобы избежать двусмысленностей и сложностей, которые могут возникнуть из-за конфликтующих имен методов и свойств из нескольких родительских классов.
Однако PHP предлагает альтернативный механизм, называемый «Чертами» , который обеспечивает форму повторного использования кода, подобную множественному наследованию. Черты позволяют разработчикам повторно использовать наборы методов в нескольких классах без фактического наследования. Черты могут быть добавлены к классам с помощью ключевого слова use.
3. Многоуровневое наследование:
Многоуровневое наследование включает класс, наследуемый от родительского класса , и сам этот родительский класс наследуется от другого родительского класса. Это формирует иерархию или цепочку классов. В PHP многоуровневое наследование позволяет классам наследовать свойства и методы с нескольких уровней вверх по иерархии классов.
Синтаксис:
Пример:
В приведенном выше примере класс Dog наследуется от класса Mammal, который, в свою очередь, наследуется от класса Animal. Таким образом, класс Dog наследует свойства и методы классов Mammal и Animal. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
4. Иерархическое наследование:
Иерархическое наследование в php происходит только тогда, когда несколько классов наследуются от одного родительского класса . В этом типе наследования один родительский класс служит базовым классом, а несколько дочерних классов являются производными от него.
Синтаксис:
Пример
В приведенном выше примере классы Circle и Rectangle наследуются от класса Shape. Они имеют общую функциональность, определенную в классе Shape, такую как метод area(), но могут иметь дополнительное специфическое поведение. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Это основные типы наследования в PHP. Каждый тип предлагает разные способы структурирования классов и повторного использования кода. Важно выбрать подходящий тип наследования в зависимости от требований и дизайна вашего приложения. Наследование — это мощная функция PHP, которая позволяет разработчикам создавать гибкие и модульные структуры кода.
Пример наследования: дочерний класс наследует открытые и защищенные члены родительского класса
Наследование — это фундаментальная концепция объектно-ориентированного программирования (ООП), позволяющая классам наследовать свойства и методы других классов.
Давайте рассмотрим сценарий, в котором у нас есть родительский класс с именем Animal, который определяет общие свойства и методы, связанные с животными. Класс Animal имеет общедоступное свойство с именем $name и защищенное свойство с именем $age. У него также есть общедоступный метод, называемый eat(), и защищенный метод, называемый sleep(). Дочерний класс Dog унаследует эти элементы от класса Animal.
В приведенном выше примере класс Dog расширяет класс Animal с помощью ключевого слова extends. Расширяя класс Animal, класс Dog наследует свойства и методы класса Animal. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Теперь давайте создадим экземпляр класса Dog и посмотрим, как он может получить доступ к унаследованным членам и использовать их.
В приведенном выше коде мы создаем объект $dog класса Dog. Поскольку свойство name является общедоступным, мы можем напрямую обращаться к нему и изменять его, используя экземпляр объекта. Точно так же метод eat() является общедоступным, поэтому мы можем вызывать его, используя экземпляр объекта. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Однако свойство age и метод sleep() защищены, что означает, что они не доступны напрямую извне иерархии классов. Мы не можем напрямую получить доступ или изменить свойство $age или вызвать метод sleep(), используя экземпляр объекта.
Защищенные члены доступны только внутри класса и его подклассов. Поэтому, если мы добавим дополнительные методы в класс Dog, мы сможем получить доступ к защищенным членам.
В обновленном классе Dog мы определяем два новых метода: showAge() и sleepDog(). Метод showAge() напрямую обращается к защищенному свойству $age, используя ключевое слово $this в контексте класса. Точно так же метод sleepDog() вызывает защищенный метод sleep() с использованием ключевого слова $this. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Используя эти дополнительные методы, мы можем косвенно обращаться к защищенным членам родительского класса и использовать их в дочернем классе.
Наследование в PHP позволяет дочерним классам наследовать общедоступных и защищенных членов своего родительского класса. Это наследование позволяет повторно использовать код и продвигает иерархическую структуру среди классов. Дочерние классы могут напрямую обращаться к унаследованным открытым членам и использовать их, но доступ к защищенным членам возможен только в иерархии классов, включая сам дочерний класс.
Расширяя родительский класс, дочерние классы могут опираться на существующие функции и добавлять новые функции, соответствующие их требованиям. Наследование — это мощный механизм, улучшающий организацию кода, модульность и возможность повторного использования в PHP-приложениях.
Пример переопределения метода
Переопределение метода — это концепция объектно-ориентированного программирования, когда дочерний класс предоставляет свою реализацию метода, который уже определен в его родительском классе. Это позволяет дочернему классу изменять или расширять поведение унаследованного метода в соответствии с его конкретными требованиями. В этом примере мы рассмотрим переопределение методов в PHP с подробным объяснением.
Давайте рассмотрим сценарий, в котором у нас есть родительский класс с именем Animal, который определяет метод makeSound(). Метод makeSound() выводит общий звук, издаваемый животным.
Теперь давайте создадим дочерний класс Dog, который расширяет класс Animal. Мы переопределим метод makeSound() в классе Dog, чтобы обеспечить конкретную реализацию звука собаки.
В приведенном выше примере класс Dog расширяет класс Animal с помощью ключевого слова extends. Расширяя класс Animal, класс Dog наследует метод makeSound(). Однако мы переопределяем метод в классе Dog, переопределяя его с тем же именем и изменяя его реализацию. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Теперь давайте создадим объект класса Dog и вызовем метод makeSound(), чтобы увидеть переопределенное поведение.
В приведенном выше коде мы создаем объект $dog класса Dog. Когда мы вызываем метод makeSound() для объекта $dog, он выводит «Собака лает». вместо общего звука, определенного в родительском классе. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
В этом примере показано, как переопределение методов позволяет настраивать поведение унаследованных методов в дочерних классах. Предоставляя конкретную реализацию метода в дочернем классе, мы можем адаптировать его к уникальным характеристикам этого класса.
Давайте рассмотрим другой пример, чтобы проиллюстрировать переопределение метода в более практическом контексте. Предположим, у нас есть родительский класс Shape с методом calculateArea(), который вычисляет площадь фигуры. Мы хотим создать дочерний класс с именем Rectangle, который вычисляет площадь прямоугольника, используя его формулу.
В приведенном выше примере класс Rectangle расширяет класс Shape и переопределяет метод calculateArea(). Класс Rectangle имеет собственные свойства $length и $width, которые определяют размеры прямоугольника. В переопределенном методе мы вычисляем площадь прямоугольника, используя предоставленные длину и ширину. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Теперь давайте создадим объект класса Rectangle и вызовем метод calculateArea(), чтобы увидеть переопределенное поведение.
В приведенном выше коде мы создаем объект $rectangle класса Rectangle, передавая длину и ширину в качестве аргументов конструктору. Когда мы вызываем метод calculateArea() для объекта $rectangle, он вычисляет и выводит площадь прямоугольника, используя переопределенную реализацию в классе Rectangle. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Этот пример демонстрирует, как переопределение методов позволяет нам обеспечивать специализированное поведение для конкретных подклассов. Настраивая реализацию унаследованного метода, мы можем гарантировать его соответствие требованиям и характеристикам дочернего класса.
Иерархическое наследование
Иерархическое наследование — это тип наследования в объектно-ориентированном программировании, где несколько дочерних классов наследуются от одного родительского класса . В этой структуре наследования каждый дочерний класс образует отдельную ветвь или иерархию от родительского класса. Это позволяет создавать отдельные подклассы со специализированным поведением, сохраняя при этом общий набор свойств и методов, унаследованных от родительского класса. В этом объяснении мы рассмотрим иерархическое наследование в PHP.
Чтобы понять иерархическое наследование, давайте рассмотрим сценарий, в котором у нас есть родительский класс с именем Animal, который представляет общее поведение животных. Класс Animal определяет общие свойства и методы, связанные с животными.
Теперь давайте создадим два дочерних класса, Dog и Cat, которые наследуются от класса Animal. Эти классы будут представлять определенные виды животных и могут иметь свои уникальные свойства и методы.
В приведенном выше примере классы Dog и Cat расширяют класс Animal с помощью ключевого слова extends. Это устанавливает иерархическую связь между родительским классом Animal и его дочерними классами Dog и Cat. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Теперь давайте создадим объекты классов Dog и Cat и продемонстрируем, как они наследуют свойства и методы класса Animal.
В приведенном выше коде мы создаем объекты классов Dog и Cat, $dog и $cat соответственно. Поскольку дочерние классы наследуются от класса Animal, они могут получать доступ и использовать свойства и методы, определенные в родительском классе. Запустите приведенный выше код в своем редакторе для лучшего и ясного объяснения.
Объекты Dog и Cat могут обращаться к свойству name и методам setName() и getName(), определенным в классе Animal. Кроме того, они также могут вызывать методы eat() и sleep() из класса Animal.
Кроме того, класс Dog представляет новый метод bark(), а класс Cat представляет новый метод meow(). Эти методы уникальны для соответствующих дочерних классов и отсутствуют в родительском классе.
Иерархическое наследование позволяет создавать отдельные ветви в иерархии классов, при этом каждый дочерний класс имеет свое специализированное поведение при совместном использовании общих свойств и методов родительского класса.
Наследование и UML
Наследование — это фундаментальная концепция объектно-ориентированного программирования, которая позволяет классу наследовать свойства и методы от другого класса , называемого родительским классом или базовым классом. Это способствует повторному использованию кода и облегчает создание иерархических отношений между классами. UML (унифицированный язык моделирования) — это стандартизированная графическая нотация, используемая для визуализации и документирования объектно-ориентированных систем. В этом объяснении мы обсудим представление наследования в диаграммах UML для PHP.
В UML наследование представлено сплошной линией со стрелкой, указывающей от дочернего класса к родительскому классу. Стрелка указывает направление наследования, при этом дочерний класс наследует от родительского класса. Рассмотрим пример, иллюстрирующий это представление.
Предположим, у нас есть родительский класс Shape, который определяет общие свойства и методы для геометрических фигур. Мы хотим создать два дочерних класса, Circle и Rectangle 9.0006 , который наследуется от класса Shape . Вот UML-представление этого отношения наследования:
На приведенной выше диаграмме UML класс Shape изображен вверху, а классы Circle и Rectangle — под ним. Сплошная линия со стрелкой, указывающей от круга к фигуре и от прямоугольника к фигуре, представляет отношение наследования. Это указывает на то, что классы Circle и Rectangle наследуют свойства и методы класса Shape.
Кроме того, UML позволяет нам обозначать тип отношения наследования с помощью специальных обозначений. В UML обычно используются три типа отношений наследования:
- Обобщение:
Обобщение представляет отношение наследования, при котором дочерний класс наследует от родительского класса. Обозначается незакрашенной стрелкой на сплошной линии. Обобщение указывает на отношение «есть-а», что означает, что дочерний класс является специализированным типом родительского класса. В нашем примере Circle и Rectangle имеют отношения обобщения с Shape. - Реализация:
Реализация представляет отношение наследования, при котором дочерний класс реализует интерфейс, предоставляемый родительским классом. Обозначается пунктирной линией со стрелкой. Реализация указывает, что дочерний класс выполняет контракт, указанный родительским классом. Однако в PHP, который не поддерживает интерфейсы, реализация обычно не используется. - Зависимость:
Зависимость представляет отношение, в котором один класс зависит от другого класса, но это не отношение наследования. Обозначается пунктирной линией со стрелкой. Зависимость указывает, что изменения в родительском классе могут повлиять на дочерний класс. Он представляет собой отношение «использует-а».
С помощью этих обозначений диаграммы UML обеспечивают визуальное представление отношений наследования между классами в приложении PHP. Они помогают понять иерархию классов, определить отношения родитель-потомок и визуализировать организацию кода.
Заключение
- Наследование позволяет повторно использовать код, позволяя дочерним классам наследовать и использовать свойства и методы, определенные в родительских классах. Это уменьшает дублирование кода и способствует эффективной разработке.
- Наследование облегчает создание иерархий классов , где дочерние классы могут быть организованы на основе их отношений с родительскими классами. Эта иерархическая структура улучшает организацию кода и делает систему более управляемой.
- Наследование включает полиморфизм , который позволяет рассматривать объекты разных классов как объекты общего родительского класса. Полиморфизм повышает гибкость и упрощает реализацию кода, позволяя взаимозаменяемо использовать связанные классы.
- Дочерние классы могут специфицировать или расширять поведение родительских классов, добавляя их уникальные свойства и методы. Это позволяет настраивать и адаптировать функциональные возможности в соответствии с конкретными требованиями.
- Наследование позволяет дочерним классам переопределять методы, унаследованные от родительских классов, предоставляя возможность изменять или расширять поведение этих методов. Эта настройка гарантирует, что классы могут иметь свою реализацию унаследованных методов.
- UML можно использовать для визуального представления иерархии наследования классов. На диаграммах UML наследование обозначается стрелкой, указывающей от дочернего класса к родительскому классу.
- PHP предоставляет модификаторов доступа (общедоступных, защищенных и частных) для управления видимостью и доступностью свойств и методов в наследовании.
- PHP не поддерживает перегрузку методов в традиционном понимании наличия нескольких методов с одинаковыми именами, но разными параметрами
Наследование в PHP — Эксперты PHP
Наследование — это функция объектно-ориентированного программирования. Как ребенок наследует наследство своих родителей, так и класс может наследовать свойства и функции другого класса.
Класс, который наследуется, называется родительским или базовым классом. Вызывается дочерний класс или подкласс Inherit-to-class. Вместо использования свойств и функций родительского класса дочернего класса он также может объявлять свойства и функции самого себя.
Использование наследования дает множество преимуществ. Наиболее важным преимуществом наследования является то, что вы можете использовать любое свойство или функцию, объявленные в базовом классе, в качестве дочернего класса. Это экономит ваше время, а также уменьшает код в программе, что снижает сложность программы.
Дочернему классу не нужно объявлять или определять их обратно для доступа к членам базового класса. Точно так же, как обычный класс получает доступ к своим свойствам и функциям, дочерний класс может получить доступ к классу базового класса.
Любой дочерний класс может получить доступ только к общедоступным и защищенным членам родительского класса.
Ниже описаны различные типы наследования.
Одиночное наследование — В этом виде наследования один класс наследует другой класс. Его также называют нормальным наследованием.
Многоуровневое наследование — При этом типе наследования также наследуется наследующий класс. Например, если есть класс B, который наследует класс A, и есть класс C, который наследует класс B, то наследование называется многоуровневым наследованием.
Множественное наследование — В этом виде наследования один класс наследует более одного класса. Этот тип наследования не разрешен в PHP.
Множественное наследование в PHP может быть реализовано с помощью интерфейсов. Класс может реализовывать несколько интерфейсов.
Синтаксис наследования PHP
Обычный синтаксис наследования любого класса в PHP приведен ниже.
В PHP, когда класс наследует другой класс, он делает это с помощью ключевого слова extends.