Использование шаблона реестра в WordPress
У меня было несколько разговоров с разными друзьями и другими пользователями Twitter о понятии глобальных переменных в языках программирования. Для тех, кто новичок в программировании или кто не уверен, чем они плохи:
Использование глобальных переменных затрудняет чтение и понимание программного обеспечения. Поскольку любой код в любом месте программы может изменить значение переменной в любое время, понимание использования переменной может потребовать понимания большой части программы.
Это не значит, что они бесполезны, но если вы заинтересованы в объектно-ориентированном программировании (особенно в среде WordPress, где вы собираетесь использовать PHP), важно понимать некоторые лучшие альтернативы. чем глобальные переменные.
То есть есть способы работать с передачей данных по вашему приложению без необходимости использования глобальных переменных. И одним из таких способов является шаблон реестра.
Шаблон реестра в WordPress
Во-первых, обратите внимание, что шаблоны проектирования превосходят любой конкретный шаблон. Пока язык предлагает концепции объектов (или даже абстракций), шаблон можно реализовать.
Но зачем использовать это?
Фото Сэмюэля Зеллера на Unsplash
Короче говоря, он обеспечивает объектно-ориентированный способ передачи информации по вашему приложению без необходимости использования глобальных переменных. Такие вещи, как контейнеры для внедрения зависимостей, также хороши для этого, но они выходят за рамки этого поста. Я также утверждаю, что бывают случаи, когда они могут быть излишними в контексте небольших плагинов.
Реализация шаблона
С учетом сказанного, как мы можем реализовать шаблон реестра в WordPress, а затем использовать его в нашей работе? Давайте сначала рассмотрим базовую структуру шаблона :
Обратите внимание, что его реализация довольно проста:
- Класс содержит один массив как частное свойство.
- Данные добавляются в массив с определенным идентификатором.
- Данные могут быть извлечены из шаблона с идентификатором.
Вы могли бы даже поднять этот конкретный шаблон на следующий уровень, если бы он принимал только класс определенного типа (например, AbstractEvent), а затем автоматически вызывал бы функцию для класса всякий раз, когда он передается (или извлекается) из реестра.
Но это становится более сложной реализацией, которую я хотел бы для этого поста.
Настройка реестра
Из-за характера системы крючков WordPress существует особый способ настройки реестра, а затем регистрация в WordPress.
Допустим, вы работаете с плагином. В загрузочном файле плагина сделайте что-то вроде этого:
Это создает реестр, а затем создает соответствующий фильтр, который мы можем использовать позже в плагине для извлечения реестра и, следовательно, других объектов, которые он поддерживает.
Использование реестра
Чтобы добавить объект в реестр, вызовите функцию добавления и передайте уникальный идентификатор и экземпляр объекта. Обратите внимание, что наша текущая реализация удалит все предыдущие экземпляры объекта с тем же ключом и заменит его тем, что мы ему передаем.
Оттуда вы можете получить объекты, которые вы сохранили в реестре:
И вы можете использовать их так же, как и любым другим способом. Но это позволяет избежать использования синглетонов, глобальных переменных или других опасных вещей.
Несколько слов о тестируемости
Еще одно преимущество, которое я обнаружил в реализации этого шаблона, заключается в том, что он не только позволяет вам легче писать модульные тесты для него, но также дает вам возможность писать тесты для объектов, которые он может содержать.
Под этим я подразумеваю, что вы можете писать свои классы более независимыми от WordPress, тем самым отделяя логику предметной области от основного приложения и делая их более репрезентативными для данных, которые они должны поддерживать.