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

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

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

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

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

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

<?php
interface ISave {
	
	public function save($data);
}

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

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

class DbSave implements ISave {
	public $db;
	
	public function __construct() {
		$this->db = new mysqli($host,$user,$pass,$db);
	}
	
	public function save($data) {
		if($data) {
			$query = "INSERT INTO post(title,text)
				VALUES('".$data['title']."','".$data['text']."')";
			$result = $this->db->query($query);
		}
	}
}

class FileSave implements ISave {
	
	public function save($data) {
		file_put_contents('file.txt',$data);
	}
} 

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

$obj = new DbSave('localhost','root','','my_db');
$obj->save(array('title','text'));

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

$obj = new FileSave();
$obj->save(array('title','text'));

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

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

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

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Хотите изучить ООП PHP?

Прямо сейчас посмотрите курс по объектно-ориентированному программированию на PHP (ООП PHP)!

Смотреть курс

Метки:

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

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree