ZANIN блог
Контакты
Крути вниз
Фильтр по:
//Post title

Декоратор на PHP

27 Июн 2021Категория : PHP

Декоратор на PHP

Практический пример применения паттерна Декоратор на PHP. Ссылка на код Декоратора.

Объяснение паттерна Декоратор.

Теоретических примеров достаточно много, но лучшее объяснение, это показать, как его применить на практике. Скорее всего почти все, кто работает с PHP знают и Wordpress, и знают, что часть его данных он хранить в сериализованных строках в базе. К примеру, есть товар с атрибутами Woocommerce. Эти атрибуты товара могут быть статичными и вариативными, и все они хранятся в таблице wp_postmeta в одной сериализованной строке product_attributes.

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

PHP декоратор

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

PHP декоратор

Далее мы создаем класс основного декоратора, он по сути служит основной оберткой.

PHP декоратор

Далее создаем специализированные декораторы, которые реализуют каждый свою собственную логику.

Статические атрибуты:

PHP декоратор

Вариативные атрибуты:

PHP декоратор

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

PHP декоратор

PHP декоратор

Второй практический пример паттерна Декоратор на PHP

В этом примере покажу, как можно оборачивать все ответы на API, чтобы в случае, если ответ тот, который ожидаем, то прилетало одно тело ответа с кодом 200, а в случае ошибок, другое тело. Суть данного примера описана чуть ниже.

PHP декоратор

PHP декоратор

PHP декоратор

PHP декоратор

PHP декоратор

PHP декоратор

Это основной контроллер приложения, тем кто работал с Laravel, он похож на контроллер в этом фреймворке. Допустим, метод get() в данном котроллере, это метод который работает по запросу в router (обрабатывает запрос и отдает ответ). В этом методе вызывается метод get_products(), который должен возвратить массив или возвратить число в качестве ответа на какую-либо ошибку в других классах. Допустим в других классах выскакивает какое-то исключение, но вы в исключении можете отправить свой ответ. Или же запрос в базу ничего не дал, и на это вы можете отправить свой ответ. Декоратор же будет общим на все приложение, и в зависимости от ваших ответов, будет отправлять уже сформированное тело ответа. При этом дополнять ошибки можно в одном месте, в классе декоратора.

PHP декоратор

PHP декоратор

PHP декоратор

Успешный ответ:

PHP декоратор

Ответ ошибки:

PHP декоратор

  • 687

01. Об авторе

Александр Занин

Занимаюсь разработкой на Django,
а также бэкенд разработкой на PHP (Laravel, Slim).

Find on :

02. Свежие статьи

Готовы заказать проект?

© ZANIN 2019 / All rights reserved.
Контакты
Close