Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про PHP: observer, pattern, subject, spl

Как описать паттерн Наблюдатель (Observer)?

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

Короткий ответ

Паттерн Наблюдатель — это поведенческий паттерн проектирования, в котором объект (субъект) уведомляет другие объекты (наблюдатели) о изменении своего состояния. Это полезно для реализации систем обработки событий. В PHP паттерн Наблюдатель может быть реализован с помощью интерфейсов SplObserver и SplSubject из стандартной библиотеки.

Длинный ответ

Паттерн Наблюдатель используется для создания системы, где один объект (субъект) уведомляет другие объекты (наблюдателей) о своих изменениях, не зная, кто эти наблюдатели. Это идеальный паттерн для реализации событийных систем или подписки на изменения состояния.

Основные компоненты паттерна:

  • Субъект (Subject): Это объект, который хранит состояние и уведомляет наблюдателей о его изменении.

  • Наблюдатель (Observer): Это объект, который слушает изменения состояния субъекта и реагирует на эти изменения.

Пример реализации в PHP:

interface Observer {
    	public function update($data);
}

class User implements Observer {
    	public function update($data) {
        	echo "User notified with data: " . $data;
    	}
}

class RoleChange implements SplSubject {
    	private $observers = [];
    	private $role;

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

    	public function detach(SplObserver $observer) {
        	$this->observers = array_filter($this->observers, function($obs) use ($observer) {
            		return $obs !== $observer;
        	});
    	}

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

    	public function setRole($role) {
        	$this->role = $role;
        	$this->notify();
    	}
}

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

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    7

Навыки

  • PHP

    PHP

Ключевые слова

#observer

#pattern

#subject

#spl

Подпишись на PHP Developer в телеграм

  • Аватар

    PHP Guru

    Mikhail Savin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.