Шаблон Prototype (Прототип)

ООП в PHP

Прототип — порождающий шаблон проектирования. Он используется для клонирования существующего объекта, вместо его инстанцирования с помощью new. Нам повезло, что в PHP уже есть всё необходимое для Prototype — это языковая конструкция clone, которая позволяет упростить реализацию праттерна до одной строчки.

Вообще может возникнуть вопрос, зачем вообще нужно клонирование, разве недостаточно обычного присваивания через равно «=»? Покажу на практическом примере.

Читать дальше →

Шаблон Observer (Наблюдатель)

ООП в PHP

Поведенческий шаблон Наблюдатель реализует механизм, с момощью которого один класс может уведомлять другие о своём изменении. Практическая реализация кода может быть разной, но в PHP уже существуют готовые стандартные интерфейсы SplSubject, SplObjectStorage и SplObserver, на которых и принято реализовывать паттерн Observer.

Стоит отметить, что сам по себе этот шаблон родом из «больших» языков. Я уже рассказывал о его реализации для Java, где класс Модели отправляет уведомления о своём изменении всем своим «слушателям».

Читать дальше →

Проблема View в MVC

Дневник

Я уже рассказывал, что в свободное время занимаюсь своим микрофреймворком и хочу поделиться некоторыми мыслями по этому поводу. Речь пойдёт о представлениях (view) в концепции MVC, точнее о том, что они на самом деле представляют.

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

Читать дальше →

Шаблон проектирования Adapter (адаптер)

ООП в PHP

Суть паттерна отражает его название — использовать два несовместимых между собой класса через некий общий интерфейс. То есть создаётся класс-оболочка, которая скрыто выполняет нужный класс. По своему поведению, Адаптер очень похож на Фасад. Правда под Фасадом больше понимается именно скрытие реализации за каким-то общим методом, а Адаптер предполагает именно «приведение» классов к одному типу.

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

Кратко опишу что в нём происходит. Есть два совершенно разных класса. Но при этом, мы хотим привести их к некоему одному типу/поведению в рамках своего проекта. В данном случае это интерфейс AdapterInterface. Дальше делаются классы, реализующие этот интерфейс: AdapterA и AdapterB.

Метод commonMethod()является обязательным, и в нём мы уже подключаем существующие методы классов ClassA и ClassB. Такой подход позволяет использовать в приложении совершенно разные классы с нужным интерфейсом.

Читать дальше →

Создание telegram-бота

Дневник

Запустил telegram-бот MaxSiteOrg_bot для своего (этого) сайта. Бот в общем-то больше призван показать возможности ботов как таковых, а также возможную интеграцию с сайтом. Например доступен вывод последних записей, рубрик и меток.

Ботами я заинтересовался недавно, поэтому текущая версия базовая. В планах реализовать ещё несколько возможностей для организации диалогов. Это нестандартная возможность для API Telegram'а, но, как мне кажется интересная и может быть востребована.

Так же я решил принимать заказы на создание ботов для сайтов. Главное условие чтобы ваш сайт работал по https и на PHP 7.1 и выше.

Читать дальше →

Перейти к странице: