Полиморфизм в объектно-ориентированном программировании на PHP

Полиморфизм в объектно-ориентированном программировании на PHP

От автора: изучив абстрактные классы и интерфейсы, мы с Вами плавно подошли ко второму основному принципу объектно-ориентированного программирования на PHP, под названием полиморфизм, который активно используется в современных фреймворках и различных библиотеках. Поэтому знать, а главное понимать, что это — должен каждый разработчик на PHP.

Итак, полиморфизм ООП на PHP – это поддержка нескольких реализаций на основе одного общего интерфейса. Если сказать несколько иначе, это взаимозаменяемость объектов реализующих один интерфейс. Теперь давайте рассмотрим вышеуказанное утверждение на примере.

Предположим, что необходимо реализовать механизм сохранения некоторой информации, абсолютно не важно, какой именно. Главное, что предусматриваются различные варианты работы механизма сохранения, а именно: сохранение в базу данных, сохранение в определенный текстовый файл, или же несколько файлов, сохранение в сессии и возможно, сохранение в качестве теста в обычный массив. Согласитесь, что хранилища абсолютно разные и для работы с каждым из них, необходимо описать соответствующий код, который для каждого будет уникальным. При этом необходимо обеспечить возможность использования любого из перечисленных механизмов и не только, то есть что бы была возможность добавлять другие механизмы. Соответственно возникает вопрос, как реализовать выбор необходимого механизма и как вообще реализовать логику, ведь повторюсь, каждый механизм по своей работе уникален. Как раз в ответе на данный вопрос, поможет реализация полиморфизма в ООП PHP.

Начнем с того, что реализуем интерфейс, который определит каркас и общее поведение классов наследников, которые будут его реализовать.

Таким образом, мы с Вами определили интерфейс, а значит все классы, которые будут его имплементировать, обязательно должны реализовать метод save(), вне зависимости от функционала который будет описан. То есть интерфейс как бы указывает на некоторую структуру классов наследников, а значит, четко определяется доступ к ним. При этом метод save(), должен как выполнить непосредственную задачу, в нашем случае – сохранение информации, определенным способом.

Следующим этапом, давайте создадим классы, реализующие вышеуказанный интерфейс.

Как Вы видите создано два класса – то есть два механизма по сохранению некой информации, каждый из которых использует определенное хранилище, а значит и логику сохранения. И каждый из них в любом случае реализует метод save() интерфейса ISave. Соответственно для того, что бы сохранить информацию, используя один из созданных механизмов необходимо создать объект соответствующего класса и вызвать на исполнение метод save().

Точно так же если необходимо сохранить информацию в файл.

А теперь давайте посмотрим на предыдущие два примера – что между ними общего? Первое, что бросается в глаза – это метод save(), который вызывается на исполнение у каждого созданного объекта. Как раз в этом и заключается суть полиморфизма на PHP – то есть использование одного и того же кода (вызов метода save()) для объектов различных классов. В рассматриваемом примере мы можем использовать различную реализацию, то есть механизмы по сохранению информации, но так или иначе для каждого из них достаточно вызвать на исполнение только метод save(), то есть метод, который задан интерфейсом. Таким образом, для смены реализации конкретного функционала, в нашем случае это механизм сохранения информации, достаточно только лишь создать объект интересующего класса.

Таким образом, на лицо взаимозаменяемость объектов, реализующих один и тот же интерфейс. Конечно, указанный пример – очень прост, но так или иначе он отлично показывает, что собой представляет полиморфизм в объектно-ориентированном программировании PHP . Более подробно указанная особенность рассмотрена в курсе Курс по объектно-ориентированному программированию (ООП PHP).

На этом данная статья завершена. Всего Вам доброго и удачного кодирования.

Метки:

Похожие статьи:

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