Pre-loader


Використання подій в класах на PHP

У PHP не існує вбудованого підтримки для подій, але ви можете реалізувати їх, використовуючи певні концепції та шаблони програмування. Один із способів - використання об'єктів-посередників (mediator). Давайте розглянемо приклад.

<?php

// Абстрактний клас спостерігача (Observer)
interface Observer {
    public function update($data);
}

// Клас-посередник (Mediator)
class EventMediator {
    private $observers = [];

    public function addObserver(Observer $observer) {
        $this->observers[] = $observer;
    }

    public function removeObserver(Observer $observer) {
        foreach ($this->observers as $key => $obs) {
            if ($obs === $observer) {
                unset($this->observers[$key]);
                break;
            }
        }
    }

    public function notifyObservers($data) {
        foreach ($this->observers as $observer) {
            $observer->update($data);
        }
    }
}

// Реалізація спостерігача (Observer)
class StartupObserver implements Observer {
    public function update($data) {
        echo "Викликається під час запуску
";
        $data["startup_message"] = "Система успішно запущена";
    }
}

class ShutdownObserver implements Observer {
    public function update($data) {
        echo "Викликається перед завершенням роботи
";
        echo "Дані системи: " . json_encode($data) . "
";
    }
}

// Використання подій та спостерігачів

$eventMediator = new EventMediator();

// Сторонні програмісти підписуються на події через посередника
$eventMediator->addObserver(new StartupObserver());
$eventMediator->addObserver(new ShutdownObserver());

// Основний код викликає події через посередника
$data = ["system_data" => "Some data from the system"];
$eventMediator->notifyObservers($data);

У цьому прикладі ми використовуємо інтерфейс Observer для спостерігачів та клас-посередник EventMediator, який відповідає за додавання, видалення та сповіщення спостерігачів. Класи StartupObserver та ShutdownObserver реалізують інтерфейс Observer та виконують певні дії під час виклику методу update.

Сторонні програмісти можуть підписати свої об'єкти на події, використовуючи об'єкт-посередник, і вони будуть отримувати сповіщення під час виникнення подій.

Автор: Рудюк С.А. 2023. K2 Cloud ERP.