Классы в объектно-ориентированном программировании на PHP

Классы в объектно-ориентированном программировании на PHP

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

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

Абстрактным классом в объектно-ориентированном программировании на PHP является класс, для которого, невозможно создать объект. Они были введены в язык PHP , начиная с версии 5 и, конечно же, сразу возникает вопрос – для чего нужен класс подобного рода? Ответ достаточно прост — абстрактные классы, как правило, создаются в качестве родительских, то есть в создаваемых проектах они наследуются другими классами и, по сути, определяют интерфейс доступа к классам, которые будут их расширять.

Для создания абстрактного класса необходимо прописывать специальное слово abstract.

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

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

Классы в объектно-ориентированном программировании на PHP

Как правило, абстрактный класс в объектно-ориентированном программировании на PHP, содержит, минимум один метод, объявленный как абстрактный. И сейчас мы с Вами подошли к еще одному новому понятию.

Абстрактный метод класса – это метод без реализации, то есть без кода, а значит и без функционала в абстрактном классе. Данный тип метода объявляется так же с использованием ключевого слова abstract и гарантирует, что его реализация обязательно будет в дочерних классах. То есть все классы наследники должны переопределить вышеуказанный метод.

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

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

В примере выше, создано два класса наследника, для различных страниц будущего проекта и каждый из них наследует один и тот же абстрактный класс и каждый описывает собственный функционал метода getPage($title). Таким образом, абсолютно не важно, какой функционал предусматривает класс наследник главное, что он реализует функционал абстрактного метода.

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

Интерфейс — описывает некий функционал, но никогда не реализует его. Для создания интерфейса, применяется конструкция interface.

При этом говорят, что классы не наследуют интерфейс, а реализуют его, то есть реализуют описанный в нем функционал. Для этого, при объявлении класса необходимо указывать зарезервированное слово implements.

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

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

Так же ни кто не запрещает наследовать конкретный класс и реализовывать некий набор интерфейсов, при этом специальное слово extends, обязательно должно использоваться перед – implements.

На этом данная статья завершена. Более подробно вышеуказанные виды классов рассмотрены в курсе Курс по объектно-ориентированному программированию (ООП PHP). Всего Вам доброго и удачного кодирования!!!

Бесплатный курс по PHP программированию

Освойте курс и создайте динамичный сайт на PHP и MySQL с полного нуля, используя модель MVC

В курсе 39 уроков | 15 часов видео | исходники для каждого урока

Получить курс сейчас!

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Получить

Метки:

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

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

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

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

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

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

Я не робот.

Spam Protection by WP-SpamFree