Экземпляр абстрактного класса php

Изучаем абстрактные классы в PHP

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

Выглядит определение абстрактного класса следующим образом:

Давайте попробуем создать объект этого класса:

Создать объект абстрактного класса нельзя – от него можно только наследоваться. Примерно как с интерфейсами – их мы можем только реализовывать в других классах.

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

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

То есть в классах-наследниках будет доступен уже реализованный метод printValue(), который без проблем можно переопределить. Он вызывает метод getValue(), который в самом классе пока не реализован, но мы можем его использовать в других методах.

Дочерние классы будут обязаны реализовать метод getValue(). Давайте опишем класс-наследник от этого абстрактного класса.

Такой код вызовет ошибку – класс ClassA не реализовал в себе метод getValue().

78a1392f5dcb9631aeed146d748d51f1cf1376fa516aa463fcc9ce28b69e0e10

Давайте это исправим.

Этот код вполне нормально отработает, и выведет на экран “Значение: kek”.

Источник

Абстрактный класс php

abstraktnyiy klass php

Здравствуйте, уважаемые читатели блога LifeExample, предлагаю вам ознакомиться с кратким обзором, одного из аспектов концепции ООП. Сегодня я сделаю заметку об абстрактных классах в php, а также опишу различия абстрактных классов php и интерфейсов.

Жуткие зверьки на картинке анонса, присутствуют здесь не просто так. Все дело в том, что мы будем создавать классы с монстрами для демонстрации возможностей абстрактных классов и интерфейсов.

На первом этапе программирования, новички не понимают смысла и назначения объектно-ориентированного подхода. Смысл понять можно только разрабатывая сложные проекты.

Перед разработкой структуры проекта, не плохо бы представлять, что такое абстрактный класс.

Абстрактный класс в php и абстрактный класс в любом другом языке программирования, являет собой базовый класс, не предназначенный для создания его экземпляров. Основной смысл и назначение абстрактных классов заключается в расширении возможностей его дочерних классов.

Как создать абстрактный php класс

Для качественного усвоения материала предлагаю рассмотреть, всю цепочку взаимодействия классов, на примере упрощенного абстрактного класса Monster, характерного большинству из сегодняшних видео игр:

Задача класса состоит в реализации базовых свойств любого монстра в RPG игре.

К базовым свойствам присущим любой особи можно отнести: размер, вес, статус, местоположение и т.д.

Свойства монстра будут инициализироваться в стандартной базовой функции initialization($arr);

Как использовать абстрактный класс PHP

Т.е. другими словами, дописывается логика абстрактного метода. В данном случаем в примере реализуется смена статуса монстра, при получении события равного единице. Если обработчик поведения подучает событие = 1 то монстр становится агресивным.

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

В данном случае при получении события равному единице, монстр данного класса издаст злобный звук, призывающий к бою. Конечно, никакого звука не будет, мы просто выведем в на страницу текстовое сообщение.

Абстрактный php класс и классы потомки определенны, давайте проверим их работоспособность.

Воспользуемся базовым методом вывода данных об объекте:

vyzov metoda abstraktnogo klassa php

Заставим нашего доброго зомби разозлиться, и передадим событие равное единице в метод обрабатывающий поведение зомби:

Проверим повлияли ли наши действия на зомби… 🙂

Все верно, свойство aggressive приняло значение yes и теперь данный объект является агрессивным.

abstraktnyi metod klassa php

Создадим монстра типа Monster_Alien :

Проделаем с ним тоже, что и с Zombie:

В результате увидим такую картину:

testiruem abstraktnyi klass php

Итак, мы наглядно познакомились с примером использования абстрактного класса php, и теперь понимаем, что это очень удобный инструмент для расширения возможностей, того или иного объекта.

Подведем итоги и закрепим несколько важных особенностей абстрактного класса.

Абстрактные классы не должны содержать реализации метода — они только описывают интерфейс метода. Методы могут быть как обычные так и абстрактные:

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

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

Интерфейсы в PHP

Что же такое интерфейсы, и для чего они нужны?

Интерфейсы объявляются при помощи идентификатора interface перед объявлением класса.

Интерфейсы php очень похожи на абстрактные классы php, но в отличии от них вообще не должны содержать в себе реализации методов. Интерфейс содержит в себе только атрибуты и абстрактные методы.

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

Другими словами, в отличии от единственности наследования абстрактно класса, мы можем наследовать столько интерфейсов, сколько захотим, а следовательно расширять возможности класса в любое время и в любом количестве.

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

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

P.S. Не пытайте создать RPG игру на php 🙂

Читайте также похожие статьи:

jquery ui sortable kak uznat novuyu pozitsiyu elementov

integratsiya paypal prostoy php klass

prostoy chat na php

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Источник

PHP абстрактные классы и интерфейсы

В этой части учебника рассказывается как работают в PHP интерфейсы и абстрактные классы, это не сильно важная тема, но всё же её знать надо.

Абстрактные классы:

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

Вот результат работы с абстрактным классов.

%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82 %D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%8B %D1%81 %D0%B0%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D1%8B%D0%BC %D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%BC

Как видите, мы вывели к какому классу принадлежит метод.

Интерфейсы:

Это один из элементов в ООП программирование, в том дела, что в PHP нет множественного наследования, и интерфейсы должны решить эту проблему.

Теперь покажу как их наследовать.

Важно:

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

Вот результат программы.

%D0%92%D1%8B%D0%B2%D0%BE%D0%B4 %D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D1%8B %D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D1%81%D0%B0

Всё хорошо работает.

Вывод:

В этой части учебник было показано, что такое в PHP 7 интерфейсы и абстрактные классы, как с ними работать.

Часть получилась не очень большая, так как, эта тема достаточна простая и рассказывать про неё практически нечего.

Источник

Все о WEB программировании

WEB программирование от А до Я

Заказать сайт:

Социальные сети:

twitter google plus facebook vkontakte rss

Партнеры:

Понимание использования интерфейса и абстрактного класса в PHP

php 600X600 11

Доброго времени суток. В интернете нашел интересную статью о понимании использования интерфейсов и абстрактных классов в PHP. Разницу между ними. И решил сделать перевод (но немножко дополненный), т.к. статья наглядно показывает нам, как и когда использовать интерфейсы и абстрактные классы. И так, поехали…

Интерфейс

Давайте обратимся к официальной документации PHP и посмотрим определение интерфейса:

Интерфейсы объектов позволяют создавать код, который указывает, какие методы должен реализовать класс, без необходимости определять, как именно они должны быть реализованы.

Интерфейс в PHP определяется, как и класс за исключением вместо ключевого слова class мы указываем interface.

Все методы интерфейса являются абстрактными и открытыми – это природа интерфейса. Пример объявления интерфейса:

В интерфейсе тело метода не определено, мы определяем только имя и параметры. Теперь давайте рассмотрим, когда использовать интерфейс. Например, у нас есть следующий код:

В приведенном выше примере автор не использует интерфейс. Автор пишет в журнал, используя класс LogToFile. Но если мы захотим писать данные в журнал с использованием класса LogToDatabase. Необходимо изменить жестко закодированную ссылку на класс:

В большом проекте, когда есть несколько классов, это нужно сделать для каждого класса в ручную. Но если, мы будем использовать интерфейс, то это проблема будет решена. И нам не нужно будет менять код в ручную. Теперь давайте рассмотрим следующий код, в котором уже используется интерфейс:

Теперь, если мы записываем данные не LogToDatabase, а с помощью LogToFile нам не нужно менять метод конструктора в ручную. В методе конструктора мы вводим интерфейс. Поэтому, если у вас есть несколько классов и вы переключаетесь с одного класса на другой, вы получите тот же результат без изменения каких-либо ссылок на классы.
В приведенном выше примере автор пишет данные в журнал, используя LogToDatabase, и теперь, если захочет записать данные в журнал, используя LogToFile, то можно просто заменить:

Таким образом мы получаем результат без изменения других классов.

Абстрактный класс

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

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

Когда использовать абстрактный класс?

Например, давайте рассмотрим класс Tea

Теперь рассмотрим класс Coffee:

В приведенных выше классах три метода addHotWater(), addSugar(), addMilk() одинаковы. Поэтому мы должны удалить дублированный код:

Автор создает абстрактный класс и называет его Template. В этом классе определяет три метода addHotWater (), addSugar () и addMilk () и создает абстрактный метод с именем addPrimaryToppings.

Теперь, если создавать класс Tea его необходимо делать расширенным для класса Template, тогда мы получаем три определенных метода и должны определить метод addPrimaryToppings ().

Источник

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

Дата публикации: 2017-01-03

100

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

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

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

php

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

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

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

Источник

Справочник по обустройству дома и дачи
Adblock
detector